可以想到,马往右跳有四种方法:右上,右斜上,左斜下,左下
想一想都能知道了,利用搜索回溯方法:
C++代码:// AC代码
#include
using namespace std;
int a[100][100],t=0;
int x[4]={2,1,-1,-2};
int y[4]={1,2,2,1};
int search(int);
int print(int);
int main()
{
a[1][1]=0;
a[1][2]=0;
search(2);
return 0;
}
int search(int i){
for(int j=0;j<=3;j++){
if(a[i-1][1]+x[j]>=0&&a[i-1][1]+x[j]<=4&&a[i-1][2]+y[j]>=0&&a[i-1][2]+y[j]<=8){
a[i][1]=a[i-1][1]+x[j];
a[i][2]=a[i-1][2]+y[j];
if(a[i][1]==4&&a[i][2]==8) print(i);
else search(i+1);
}
}
}
int print(int i){
cout<<++t<<": ";
for(int j=1;j";
cout<<"4,8\n";
}
#include
using namespace std;
int map[8][4];
int x,y;
int jump(int x,int y)
{
if(x>8||x<0||y>4||y<0) return 0;
if(x==8&&y==4) return 1;
else
{
return jump(x+1,y+2)+jump(x+2,y+1)+jump(x+2,y-1)+jump(x+1,y-2);
}
}
int main()
{
printf("%d",jump(0,0));
return 0;
}
今天竞赛班刚刚做的。。。
半张棋盘有很多种,20种左右吧
3*3*3*3*3*2+3*3*3*3*2=648种
共37种