回溯8--跳马问题
一、心得
二、题目及分析
三、代码及结果
1 /*
2 一边默认一个顺序,另外一边出要求
3 选书:默认按照人一个个来,选书的话就一本本选就好了
4 */
5 #include <iostream>
6 using namespace std;
7
8 //标志数组
9 int vis[6][6];
10 //结果数组
11 int ans[6][6];
12 int horseRoad[9][2]={{0,0},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
13 int total=0;
14
15 void print(){
16 total++;
17 if(total<=5){
18 cout<<"<"<<total<<">"<<": "<<endl;
19 for(int i=0;i<=4;i++){
20 for(int j=0;j<=4;j++){
21 printf("%2d ",ans[i][j]);
22 }
23 cout<<endl;
24 }
25 }
26 }
27
28 int search(int r,int c,int step){
29 if(step==26) print();
30 else
31 for(int i=1;i<=8;i++){
32 int r1=r+horseRoad[i][0];
33 int c1=c+horseRoad[i][1];
34 if(!vis[r1][c1]&&r1>=0&&r1<=4&&c1>=0&&c1<=4){
35 ans[r1][c1]=step,vis[r1][c1]=1;
36 search(r1,c1,step+1);
37 vis[r1][c1]=0;
38 }
39 }
40 }
41
42 int main(){
43 ans[0][0]=1;
44 vis[0][0]=1;
45 search(0,0,2);
46 cout<<total;
47 return 0;
48 }