sicily 1152. 简单的马周游问题
因为矩阵很小,简单的深搜。。可是。。
有一点不明白,当我的chage数组为change[]={-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1}的时候就会TLE,深搜的方向不同时间差别这么大吗?
这个时间复杂度怎么分析? 诚心请教各位大牛为小弟指点迷津。。。
1 #include<iostream> 2 #include<memory.h> 3 using namespace std; 4 5 bool visited[5][6]; 6 int road[30]; 7 int change[]={-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2}; 8 9 void dfs(int row,int col,int now) 10 { 11 visited[row][col]=1; 12 road[now]=6*row+col+1; 13 if(now==29) return ; 14 for(int i=0;i<16;i+=2) 15 { 16 int now_row=row+change[i]; 17 int now_col=col+change[i+1]; 18 if(now_row>=0&&now_row<5&&now_col>=0&&now_col<6&&visited[now_row][now_col]==0) 19 dfs(now_row,now_col,now+1); 20 } 21 if(road[now+1]==0) //待上面那个for循环做完后,仍找不到下一步,说明这步走得不对,要清除,回溯另找路径 22 { 23 visited[row][col]=0; 24 road[now]=0; 25 } 26 } 27 int main() 28 { 29 int N; 30 while(cin>>N&&N!=-1) 31 { 32 int row,col; 33 int now=0; 34 row=N/6; 35 col=N%6-1; 36 memset(road,0,sizeof(road)); 37 memset(visited,0,sizeof(visited)); 38 39 dfs(row,col,now); 40 for(int i=0;i<30;i++) 41 { 42 cout<<road[i]; 43 if(i!=29) cout<<' '; 44 } 45 cout<<endl; 46 } 47 return 0; 48 }