问题描述:给你一个迷宫,让你求出从起点到终点的最短路,并且输出路径,(这个程序是倒这的,如果要正的,记录一下,再输出)。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct note {
int x,y;
int stemp;
} Dian,dian,book[105][105];
queue<note>q;
char Map[105][105];
int sx,sy,ex,ey;
int m,n;
int l;
void outroad() {
int X,Y,x1,y1;
X=ex;
Y=ey;
printf("%d %d\n",X,Y);
int i=1;
while(i!=l) {
x1=book[X][Y].x;
y1=book[X][Y].y;
X=x1;
Y=y1;
printf("%d %d\n",X,Y);
i++;
}
}
void BFS() {
int next[4][2]= {{0,1},{1,0},{-1,0},{0,-1}};
int k;
while(!q.empty())
q.pop();
Dian.x=sx;
Dian.y=sy;
Dian.stemp=0;
q.push(Dian);
while(!q.empty()) {
Dian=q.front();
q.pop();
for(k=0; k<4; k++) {
dian.x=Dian.x+next[k][0];
dian.y=Dian.y+next[k][1];
dian.stemp=Dian.stemp+1;
if(dian.x>n||dian.x<=0||dian.y>m||dian.y<=0||Map[dian.x][dian.y]=='*'||book[dian.x][dian.y].stemp==1)
continue;
else {
book[dian.x][dian.y].stemp=1;
book[dian.x][dian.y].x=Dian.x;
book[dian.x][dian.y].y=Dian.y;
q.push(dian);
if(dian.x==ex&&dian.y==ey) {
printf("最短路为%d\n",dian.stemp);
l=dian.stemp;
outroad();
return ;
}
}
}
}
}
int main() {
int i,j;
scanf("%d%d",&n,&m);
getchar();
for(i=1; i<=n; i++) {
for(j=1; j<=m; j++) {
scanf("%c",&Map[i][j]);
if(Map[i][j]=='S') {
sx=i;
sy=j;
}
if(Map[i][j]=='E') {
ex=i;
ey=j;
}
book[i][j].stemp=0;
}
getchar();
}
memset(book,0,sizeof(book));
BFS();
}