1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include<stdio.h> #include<string.h> #include<stdlib.h> int mmp[20][20]; int vis[20][20]; int step; int ma[9][2]={0,0,1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,1,-2,-1}; int n,m; int b,c; void bfs(int x,int y) { if(x==n&&y==m) step++; int next[2][2]={1,0,0,1}; int i; int dx,dy; for(i=0;i<2;i++) { dx=x+next[i][1]; dy=y+next[i][0]; if(dx<0||dx>n||dy<0||dy>m) continue; if(!vis[dx][dy]&&mmp[dx][dy]==0) { vis[dx][dy]=1; bfs(dx,dy); //回溯 vis[dx][dy]=0; //回溯前清场 } } } int main() { int i; int dx,dy; printf("请输入目标B点坐标和马的坐标C:"); scanf("%d %d %d %d",&n,&m,&b,&c) ; memset(vis,0,sizeof(vis)); memset(mmp,0,sizeof(mmp)); for(i=0;i<=8;i++) { dx=b+ma[i][0]; dy=c+ma[i][1]; if(dx<0||dx>n||dy<0||dy>m) continue; else mmp[dx][dy]=1; } vis[0][0]=1; bfs(0,0); printf("从A到B的路径数为:"); printf("%d\n",step); return 0; }
|