跳马问题
在5*5格的棋盘上,有一只中国象棋的马,从(1,1)点出发,按日字跳马,它可以朝8个方向跳,但不允许出界或跳到已跳过的格子上,要求在跳遍整个棋盘。
输出前5个方案及总方案数。
输出格式示例:
1 16 21 10 25
20 11 24 15 22
17 2 19 6 9
12 7 4 23 14
3 18 13 8 5
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
int X[8]={1,2,2,1,-1,-2,-2,-1};
int Y[8]={-2,-1,1,2,2,1,-1,-2};
int a[100][100]={0},num=0;
bool b[100][100]={0};
void print()
{
num++;
if(num<=5){
for(int k=1;k<=5;k++){
for(int kk=1;kk<=5;kk++)
cout<<setw(5)<<a[k][kk];
cout<<endl;
}
cout<<endl;
}
}
int search(int i,int j,int n)
{
int k,x,y;
if(n>25){
print();
return 0;
}
for(k=0;k<=7;k++){
x=i+X[k];
y=j+Y[k];
if(x<=5&&x>=1&&y<=5&&y>=1&&(!b[x][y])) {
b[x][y]=1;
a[x][y]=n;
search(x,y,n+1);
b[x][y]=0;
a[x][y]=0;
}
}
}
int main()
{
a[1][1]=1;
b[1][1]=1;
search(1,1,2);
cout<<num<<endl;
return 0;
}