# include<stdio.h>
# include<math.h>
int a[100]={0},b[100]={0},sum=0,k=25;//a[]横坐标,b[]纵坐标
int check(int n){
int i;
if((a[n]-a[n-1]==0&&abs(b[n]-b[n-1])==1)||(b[n]-b[n-1]==0&&abs(a[n]-a[n-1])==1)){
if(b[n]==2&&a[n]!=2) return 0;
for(i=0;i<n;i++){
if(a[n]==a[i]&&b[n]==b[i]) return 0;
}
return 1;
}
return 0;
}
void jump(int n){
int i,j;
for(i=0;i<=4;i++){
for(j=0;j<=4;j++){
a[n]=i;
b[n]=j;
if(check(n)){
if(a[n]==4&&b[n]==4) {
sum++;
if(n<k) k=n;//k记录最小步数
}
else jump(n+1);
}
}
}
}
void leastpath(int n){
int i,j,p;
for(i=0;i<=4;i++){
for(j=0;j<=4;j++){
a[n]=i;
b[n]=j;
if(check(n)){
if(a[n]==4&&b[n]==4) {
if(n==k){
for(p=0;p<=k;p++)
printf("(%d,%d) ",a[p],b[p]);
printf("\n");
}
}
else leastpath(n+1);
}
}
}
}
int main(){
jump(1);
printf("%d\n",sum);
printf("最短路径是%d\n",k+1);
leastpath(1);
return 0;
}
青蛙跳河
猜你喜欢
转载自blog.csdn.net/Z_Y_D_/article/details/58694961
今日推荐
周排行