青蛙跳河

# 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