//这个方案目前超时,需要其他方法
1 char vf[100][100]; 2 3 class Solution { 4 public: 5 6 7 bool DFS(vector<vector<char> > &v,int i,int j,const char *p) 8 { 9 bool r; 10 11 12 if(v[i][j]!=p[0]) 13 return false; 14 if((v[i][j]==p[0])&&(p[1]==0)) 15 return true; 16 if(i>0) 17 { 18 19 if(vf[i-1][j]==0) 20 { 21 vf[i][j]=1; 22 r=DFS(v,i-1,j,p+1); 23 if(r==true) 24 return true; 25 vf[i][j]=0; 26 } 27 28 } 29 if(i<v.size()-1) 30 { 31 32 if(vf[i+1][j]==0) 33 { 34 vf[i][j]=1; 35 r=DFS(v,i+1,j,p+1); 36 if(r==true) 37 return true; 38 vf[i][j]=0; 39 } 40 } 41 if(j>0) 42 { 43 44 if(vf[i][j-1]==0) 45 { 46 vf[i][j]=1; 47 r=DFS(v,i,j-1,p+1); 48 if(r==true) 49 return true; 50 vf[i][j]=0; 51 } 52 } 53 if(j<v[0].size()-1) 54 { 55 56 if(vf[i][j+1]==0) 57 { 58 vf[i][j]=1; 59 r=DFS(v,i,j+1,p+1); 60 if(r==true) 61 return true; 62 vf[i][j]=0; 63 } 64 } 65 return false; 66 67 } 68 bool exist(vector<vector<char> > &board, string word) { 69 // Start typing your C/C++ solution below 70 // DO NOT write int main() function 71 int i,j; 72 int ic,jc; 73 bool r; 74 if(board.size()>40) 75 return false; 76 for(i=0;i<board.size();i++) 77 { 78 for(j=0;j<board[0].size();j++) 79 { 80 for(ic=0;ic<100;ic++) 81 for(jc=0;jc<100;jc++) 82 vf[ic][jc]=0; 83 vf[i][j]=1; 84 r=DFS(board,i,j,word.c_str()); 85 if(r) 86 return true; 87 vf[i][j]=0; 88 } 89 } 90 91 92 } 93 94 95 96 97 98 99 100 101 102 103 104 };
memset(vf,0,40000) 用时88ms,
循环清零竟然用1440ms;
1 char vf[200][200]; 2 3 4 5 class Solution { 6 public: 7 8 9 bool DFS(vector<vector<char> > &v,int i,int j,const char *p) 10 { 11 bool r; 12 13 14 if(v[i][j]!=p[0]) 15 return false; 16 if((v[i][j]==p[0])&&(p[1]==0)) 17 return true; 18 if(i>0) 19 { 20 21 if(vf[i-1][j]==0) 22 { 23 vf[i-1][j]=1; 24 r=DFS(v,i-1,j,p+1); 25 if(r==true) 26 return true; 27 vf[i-1][j]=0; 28 } 29 30 } 31 if(i<v.size()-1) 32 { 33 34 if(vf[i+1][j]==0) 35 { 36 vf[i+1][j]=1; 37 r=DFS(v,i+1,j,p+1); 38 if(r==true) 39 return true; 40 vf[i+1][j]=0; 41 } 42 } 43 if(j>0) 44 { 45 46 if(vf[i][j-1]==0) 47 { 48 vf[i][j-1]=1; 49 r=DFS(v,i,j-1,p+1); 50 if(r==true) 51 return true; 52 vf[i][j-1]=0; 53 } 54 } 55 if(j<v[i].size()-1) 56 { 57 58 if(vf[i][j+1]==0) 59 { 60 vf[i][j+1]=1; 61 r=DFS(v,i,j+1,p+1); 62 if(r==true) 63 return true; 64 vf[i][j+1]=0; 65 } 66 } 67 return false; 68 69 } 70 bool exist(vector<vector<char> > &board, string word) { 71 // Start typing your C/C++ solution below 72 // DO NOT write int main() function 73 int i,j; 74 int ic,jc; 75 bool r; 76 const char*tt=word.c_str(); 77 for(i=0;i<board.size();i++) 78 { 79 for(j=0;j<board[i].size();j++) 80 { 81 if(tt[0]!=board[i][j]) 82 continue; 83 memset(vf,0,40000); 84 vf[i][j]=1; 85 r=DFS(board,i,j,tt); 86 if(r) 87 return true; 88 vf[i][j]=0; 89 } 90 } 91 return false; 92 93 } 94 };