LintCode 132-单词搜索II 深度优先

来源:互联网 发布:威锋论坛mac office 编辑:程序博客网 时间:2024/05/22 10:24

本人电子系,只为一学生。心喜计算机,小编以怡情。


给出一个由小写字母组成的矩阵和一个字典。找出所有同时在字典和矩阵中出现的单词。一个单词可以从矩阵中的任意位置开始,可以向左/右/上/下四个相邻方向移动。

样例
给出矩阵:
doaf
agai
dcan
和字典:
{“dog”, “dad”, “dgdg”, “can”, “again”}

返回 {“dog”, “dad”, “can”, “again”}

思路:
遍历字符矩阵
深度优先搜索判断是否存在解


static public ArrayList<String> wordSearchII(char[][] board, ArrayList<String> words) {        // write your code here        int flag[]={0};//定义是否找到解得确认标志        int [][]next={{-1,0},{0,1},{1,0},{0,-1}};//定义四个搜索方向        int visited[][]=new int [board.length][board[0].length];//定义已经走过的数组        ArrayList<String>temp=new ArrayList<String>(words);//用来备份        for(String can:temp) {            label:            for (int i = 0; i < board.length; i++) {                for (int j = 0; j < board[0].length; j++) {                    if (can.charAt(0) == board[i][j]) {                        visited[i][j]=1;//标记当前走过                        isin(board, can, i, j, flag,1,next,visited);//调用递归函数                        visited[i][j]=0;//取消标记                        if (flag[0]==1) {                            break label;//退出所有内层循环                        }                    }                }            }            if (flag[0]==0) {//如果没找到                words.remove(can);            }            flag[0]=0;//无论找没找到都要置零        }        return words;    }    //深度优先搜索static public void isin(char[][]board,String can,int i,int j,int flag[],int count,int [][]next,int visited[][])    {       if(count>=can.length()) {//长度超出,证明找到了           flag[0]=1;           return;       }       else{           for(int k=0;k<4;k++)//搜索四个方向           {               int m=i+next[k][0];//坐标               int n=j+next[k][1];               if(m<0||m>board.length-1||n<0||n>board[0].length-1) continue;               if(board[m][n]==can.charAt(count)&&visited[m][n]==0)//如果是当前的字符对应候选那一位,并且没走过的话               {                   visited[m][n]=1;//标记已走过                   isin(board,can,m,n,flag,count+1,next,visited);                   visited[m][n]=0;//取消标记               }           }       }    }
0 0
原创粉丝点击