给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。
单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。
样例
给出board =
[
"ABCE",
"SFCS",
"ADEE"
]
word = "ABCCED", ->返回 true,
word = "SEE",-> 返回 true,
单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。
样例
给出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));
}
}