这个题,,,由于dfs是个bool型的,,,在递归的时候,忘记写return
然后就一直错orz
1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 5 using namespace std; 6 string a[11]; 7 int ans=0; 8 9 int vis[11][11]; 10 11 bool dfs(int i,int j) { 12 if (i < 0 || j < 0 || i > 9 || j > 9) 13 return true; 14 if (vis[i][j] == 1) 15 return false; 16 17 18 vis[i][j] = 1; 19 20 if (a[i][j] == 'U') 21 return dfs(i - 1, j);//这个地方一定要加return,因为这是一个bool型的 22 23 if (a[i][j] == 'D') 24 return dfs(i + 1, j); 25 if (a[i][j] == 'L') 26 return dfs(i, j - 1); 27 if (a[i][j] == 'R') 28 return dfs(i, j + 1); 29 // switch(a[i][j]) {//这样也可以 30 // case 'U': 31 // return dfs(i - 1, j); 32 // case 'D': 33 // return dfs(i + 1, j); 34 // case 'L': 35 // return dfs(i, j - 1); 36 // case 'R': 37 // return dfs(i, j + 1); 38 // }
39 } 40 41 int main() { 42 a[0] = "UDDLUULRUL"; 43 a[1] = "UURLLLRRRU"; 44 a[2] = "RRUURLDLRD"; 45 a[3] = "RUDDDDUUUU"; 46 a[4] = "URUDLLRRUU"; 47 a[5] = "DURLRLDLRL"; 48 a[6] = "ULLURLLRDU"; 49 a[7] = "RDLULLRDDD"; 50 a[8] = "UUDDUDUDLL"; 51 a[9] = "ULRDLUURRR"; 52 for (int i = 0; i < 10; ++i) { 53 for (int j = 0; j < 10; ++j) { 54 memset(vis, 0, sizeof(vis)); 55 if (dfs(i, j)) 56 ans++; 57 58 } 59 60 } 61 cout<<ans; 62 return 0; 63 64 }