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 }    

 

posted @ 2012-09-19 09:05  晨风世界  阅读(263)  评论(0编辑  收藏  举报