华为机试:单词搜索(找到它)

news/2024/7/20 22:20:17 标签: 深度优先, 算法, 回溯, Java, 华为机试

【编程题目 |200分】 单词搜索【2021 H2, 2022 Q1,Q2 考试题】

题目描述

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。

假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。

注意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

输入描述

输入第 1 行包含两个整数 n、m (0 < n,m < 21) 分别表示 n 行 m 列的矩阵,

第 2 行是长度不超过100的单词 W (在整个矩阵中给定单词 W 只会出现一次),

从第 3 行到第 n+2 行是指包含大小写英文字母的长度为 m 的字符串矩阵。

输出描述

如果能在矩阵中连成给定的单词,则输出给定单词首字母在矩阵中的位置(第几行 第几列),

否则输出“NO”。

示例

输入

5 5
HELLOWORLD
CPUCY
EKLQH
CHELL
LROWO
DGRBC

输出

3 2

输入

5 5
HELLOWORLD
CPUCY
EKLQH
CHELL
LROWO
AGRBC

输出

NO

思路分析

单词搜索,上下左右搜索,典型的回溯法搜索。

可以参考:leetcode原题:79.单词搜索

使用布尔数组变量visited,判断是否搜索过。

使用布尔变量判断是否找到。

参考代码

import java.util.Scanner;

public class wordSearch {
    public static boolean find = false;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        in.nextLine();
        String word = in.nextLine();
        char[][] board = new char[m][n];
        for (int i = 0; i < m; i++) {
            String str = in.nextLine();
            for (int j = 0; j < n; j++) {
                board[i][j] = str.charAt(j);
            }
        }
        // 回溯DFS
        boolean[][] visited = new boolean[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == word.charAt(0)) {
                    dfs (i, j, board, word, visited, 0);
                    if (find) {
                        System.out.print(i + 1);
                        System.out.print(" ");
                        System.out.print(j + 1);
                        return;
                    }
                }
            }
        }
        System.out.print("NO");
    }
    public static void dfs(int i, int j, char[][] board, String word, boolean[][] visited, int pos) {
        int m = board.length, n= board[0].length;
        if (i < 0 || i >= m || j < 0 || j >= n || visited[i][j] || find || board[i][j] != word.charAt(pos)) {
            return;
        }
        if (pos == word.length() - 1) {
            find = true;
            return;
        }
        visited[i][j] = true;  // 修改当前状态
        dfs(i + 1, j, board, word, visited, pos + 1);
        dfs(i - 1, j, board, word, visited, pos + 1);
        dfs(i, j + 1, board, word, visited, pos + 1);
        dfs(i, j - 1, board, word, visited, pos + 1);
        visited[i][j] = false; // 撤销修改
    }
}

欢迎在评论区指正以及留下自己的更简洁的方法。


http://www.niftyadmin.cn/n/1727558.html

相关文章

postgreSQL数据库 向表中快速插入1000000条数据

不用创建函数&#xff0c;直接向表中快速插入1000000条数据 create table tbl_test (id int, info text, c_time timestamp); insert into tbl_test select generate_series(1,100000),md5(random()::text),clock_timestamp(); select count(id) from tbl_test; --查看个数据条…

华为机试:找城市

【编程题目 |200分】 找城市【2022 Q1,Q2 考试题】 题目描述 一个城市规划问题&#xff0c;一个地图有很多城市&#xff0c;两个城市之间只有一种路径&#xff0c;切断通往一个城市i的所有路径之后&#xff0c;其他的城市形成了独立的城市群&#xff0c;这些城市群里最大的城…

使用函数查询符合条件的表,并清空表数据,或者删除表

下边的查询条件可根据具体需求进行修改 调用方法&#xff1a;select * from 函数名()&#xff1b;eg&#xff1a;select * from query_all_table_name(); 1.查询所有符合条件的表名 create or replace function query_all_table_name() returns setof varchar as $$declaresel…

华为机试:学生方阵

【编程题目 |200分】学生方阵【2022 Q2 考试题】 题目描述 学校组织活动&#xff0c;将学生排成一个矩形方阵。请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上&#xff0c;方向可以是水平的&#xff0c;垂直的&#xff0c;成对角线的或者呈反对角线的…

beyond compare tab(制表符)占位

beyond compare 中的tab键&#xff08;制表符&#xff09;默认是8个&#xff0c;但有的编辑器是4个&#xff0c;这会导致比较文件时格式错乱问题&#xff0c;所以需要把beyond compare的tab键占位数设置成和编辑器一致就可以了&#xff0c;具体设置方法如下图所示&#xff1a;修…

源码编译安装net-snmp

编译安装net-snmp 1.官网下载最新net-snmp的tar包&#xff1a;http://www.net-snmp.org/download.html 如果官网打不开&#xff0c;可从这里下载net-snmp-5.7.3.tar.gz(内附gcc的rpm包) 2.检查主机是否已安装编译工具gcc&#xff0c;直接输入gcc命令回车查看&#xff0c;如果…

设备 eth0 似乎不存在, 初始化操作将被延迟

今天将eth0文件编辑好之后&#xff0c;不管是重启network还是重启电脑都没用&#xff0c;一直显示个eth1&#xff0c;我就很纳闷&#xff0c;明明没有eth1这个文件&#xff0c;eth1到底从哪里来的&#xff0c;网上好多方法都试过了还是不行&#xff0c;什么删除/etc/udev/rules…

Nginx安装配置,支持http以及https

一、Nginx安装可参考&#xff1a;Nginx 安装配置如果yum安装失败&#xff0c;可从这个地方***下载相关rpm包&#xff0c;直接执行install.sh安装即可 二、配置http修改配置文件nginx.conf&#xff0c;安装上边的步骤安装&#xff0c;应该是在/usr/local/webserver/nginx/conf这…