走迷宫
Posted ly_rabbit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走迷宫相关的知识,希望对你有一定的参考价值。
源代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 5 #define M 5 int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; int maze[N][M]; int visit[N][M];//记录是否访问 int dist[N][M];//记录到当前位置的距离 int q[N*M];//模拟一个队列 int fa[N][M];//记录父节点的位置号 void bfs(int a,int b) { int front=0; int rear=0; int u,v; u=a*M+b; visit[a][b]=1; dist[a][b]=0; fa[a][b]=u; q[rear++]=u; while(front<rear) { u=q[front++]; a=u/M; b=u%M; for(v=0;v<4;v++) { int nx=a+dir[v][0]; int ny=b+dir[v][1]; if(nx>=0 && nx<=N && ny>=0 && ny<=M &&!maze[nx][ny] && !visit[nx][ny]) { int v=nx*M+ny; q[rear++]=v; visit[nx][ny]=1; dist[nx][ny]=dist[a][b]+1; fa[nx][ny]=u; } } } } //打印出一条路径 void print_path(int x,int y) { int fx=fa[x][y]/M; int fy=fa[x][y]%M; if(fx!=x || fy!=y) { print_path(fx,fy); printf("%d%d\n",x,y); } } void main() { int i,j; memset(visit,0,sizeof(visit)); memset(dist,0,sizeof(dist)); for(i=0;i<N;i++) for(j=0;j<M;j++) scanf("%d",&maze[i][j]); bfs(0,0); print_path(4,4); }
以上是关于走迷宫的主要内容,如果未能解决你的问题,请参考以下文章