为了账号安全,请及时绑定邮箱和手机立即绑定

有大神能解释一下这串代码吗??!!(特别是怎样把所有路径都输出的)

有大神能解释一下这串代码吗??!!(特别是怎样把所有路径都输出的)

C
廖紫菱 2016-04-10 12:37:43
#include<stdio.h>int fx[8]={1,2,2,1,-1,-2,-2,-1};  int fy[8]={2,1,-1,-2,-2,-1,1,2};  int x,y,dep;int count=0;int n=5;int m=5;int a[5][5];int check(int x,int y);void find(int x,int y,int dep);void output();int main(){     int i,j; int dep=1;//记录走过的点的个数  scanf("%d,%d",&x,&y); if(x<0||x>(n-1)||y<0||y>(m-1)){ printf("The data is wrong.\n"); } else{ for(i=0;i<n;i++){ for(j=0;j<m;j++){ a[i][j]=0; } }//所有位置都未走过  } a[x][y]=1;     find(x,y,2); if(count==0){ printf("There is no solution"); } else    printf("Total count=%d\n",count); return 0; } int check(int x,int y){ int flag=1; if (x<0||x>(n-1)||y<0||y>(m-1)){    flag=0;} if (a[x][y]!=0){ flag=0;} return flag;}//判断是否在范围内的函数 void find(int x,int y,int dep){ int i,xx,yy; for(i=0;i<8;i++){ xx=x+fx[i]; yy=y+fy[i]; if (check(xx,yy)==1){ a[xx][yy]=dep; if (dep==n*m){ output(); }  else     find(xx,yy,dep+1);    a[xx][yy]=0;//回溯  }//判断是否出界或者是否走过  }} void output(){ count++; printf("The count=%d\n",count); int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) { printf("%d ",a[i][j]);//输出走过的位置  } printf("\n");  }}
查看完整描述

1 回答

?
qq___524

TA贡献171条经验 获得超74个赞

这是深搜算法,仔细理解一下深搜算法就能明白了

查看完整回答
反对 回复 2016-04-12
  • 1 回答
  • 0 关注
  • 1034 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信