单词搜索

来源:互联网 发布:怎样修改导航仪端口 编辑:程序博客网 时间:2024/06/06 05:57
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。
单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。
样例
给出board =
[
  "ABCE",


  "SFCS",


  "ADEE"
]
word = "ABCCED", ->返回 true,
word = "SEE",-> 返回 true,

word = "ABCB", -> 返回 false.

import java.util.Scanner;/** * 给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。样例给出board =[  "ABCE",  "SFCS",  "ADEE"]word = "ABCCED", ->返回 true,word = "SEE",-> 返回 true,word = "ABCB", -> 返回 false. *  * @author Dell * */public class Test123 {public static boolean exist(char[][] board, String word){   if(word=="")   return false;   int n=board.length;   int m=board[0].length;   boolean[][] visited=new boolean[n][m]; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(search(board, visited, i, j, word, 0)) return true; } }return false;}public static boolean search(char[][] board, boolean[][] visited, int row, int col, String word, int start){if(start==word.length()){return true;}boolean result=false;if(row>=0&&row<board.length&&col>=0&&col<board[0].length&&visited[row][col]==false&&word.charAt(start)==board[row][col]){visited[row][col]=true;start++;result=search(board,visited,row-1,col,word,start)||search(board,visited,row,col+1,word,start)||search(board,visited,row+1,col,word,start)||search(board,visited,row,col-1,word,start);if(result==false){visited[row][col]=false;start--;}}return result;}    public static void main(String[] args) {Scanner sc=new Scanner(System.in);        int n=sc.nextInt();        sc.nextLine();        String[] s=new String[n];        for(int i=0;i<s.length;i++)        {        s[i]=sc.nextLine();        }        char[][] board=new char[n][];            for(int i=0;i<s.length;i++)            {             board[i]=s[i].toCharArray();            }            String word=sc.next();           System.out.println(exist(board,word));        }}




原创粉丝点击