//这个方案目前超时,需要其他方法
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 };

 

 

 

posted on 2013-06-03 00:52  宇睿  阅读(145)  评论(0编辑  收藏  举报