找到它

 找到它是个小游戏,你需要在一个矩阵中找到给定的单词
 假设给定单词HELLOWORLD,在矩阵中只要能找HELLOWORLD就算通过
 注意区分英文字母大小写,并且你只能上下左右行走,不能走回头路
 输入描述:
  输入第一行包含两个整数N M (0 < N, M < 21)
分别表示N行M列的矩阵
  第二行是长度不超过100的单词W
  在整个矩阵中给定单词W只会出现一次
  从第3行到第N+2是只包含大小写英文字母的长度为M的字符串矩阵
 输出描述
  如果能在矩阵中连成给定的单词,则输出给定单词首字母在矩阵中的位置为第几行第几列
  否则输出 NO

/**
  *HELL
  *LROWO
  *D 
  */
import java.util.*;

public class Main{
    static boolean found = false;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int col = sc.nextInt();
        int row = sc.nextInt();
        sc.nextLine();
        //目标字符
        String target = sc.nextLine();
        //字符数组
        char[][] check = new char[col][row];
        //接收字符数组
        for(int i = 0;i < col;i++){
            String s = sc.nextLine();
            for(int j = 0;j < row;j++){
                check[i][j] = s.charAt(j);
            }
        }
        boolean[][] checkFound = new boolean[col][row];
        for(int i = 0;i < col;i++){
            for(int j = 0;j < row;j++){
                if(target.charAt(0) == check[i][j]){
                    checkFound[i][j] = true;
                    backTracking(check,checkFound,i,j,target,0,col,row);
                    checkFound[i][j] = false;
                    
                    if(found){
                        System.out.print((i + 1) +" "+ (j + 1));
                        return;
                    }
                }
            }
        }
        if(!found){
            System.out.println("NO");
        }
    }
    public static void backTracking(char[][] check,boolean[][] checkFound,int i,int j,String target,int index,int col,int row){
        if(index == target.length() -  1){
            found = true;
            return;
        }
        
        if(i - 1 >= 0&&!checkFound[i - 1][j]&&check[i - 1][j] == target.charAt(index + 1)){
            checkFound[i - 1][j] = true;
            backTracking(check,checkFound,i-1,j,target,index+1,col,row);
            checkFound[i - 1][j] = false;
        }
        if (found) return;
        if(i + 1 < col&&!checkFound[i + 1][j]&&check[i + 1][j] == target.charAt(index + 1)){
            checkFound[i + 1][j] = true;
            backTracking(check,checkFound,i+1,j,target,index+1,col,row);
            checkFound[i + 1][j] = false;
        }
        if (found) return;
        if(j - 1 >= 0&&!checkFound[i][j - 1]&&check[i][j - 1] == target.charAt(index + 1)){
            checkFound[i][j - 1] = true;
            backTracking(check,checkFound,i,j-1,target,index+1,col,row);
            checkFound[i][j - 1] = false;
        }
        if (found) return;
        if(j + 1 < row&&!checkFound[i][j+1]&&check[i][j+1] == target.charAt(index + 1)){
            checkFound[i][j+1] = true;
            backTracking(check,checkFound,i,j+1,target,index+1,col,row);
            checkFound[i][j+1] = false;
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容