走迷宫

来源:互联网 发布:朝鲜的未来 知乎 编辑:程序博客网 时间:2024/05/01 18:01
#include<iostream>#include<stdio.h>#include<string>#include<cstring>using namespace std;const int Max = 101;bool  vis[Max][Max];int fa[Max][Max],q[Max*Max],dist[Max][Max],last_dir[Max][Max],mat[Max][Max];int n,m,dx[] = {-1,0,1,0},dy[] = {0,1,0,-1};char name[] = {'U','D','L','R'};void bfs(int x,int y){int front = 0,rear = 0,d,u;u = x*m + y;vis[x][y] = 1;fa[x][y] = u;dist[x][y] = 0;q[rear++] = u;while(front < rear){u = q[front++];x=u/m;y=u%m;cout<<"x= "<<x<<" "<<"y= "<<y<<endl;for(d = 0; d < 4; d ++){int nx = x+dx[d],ny = y + dy[d];cout<<"nx= "<<nx<<"ny= "<<ny<<endl;if(nx >= 0 && nx <n && ny >= 0 && ny < m && !mat[nx][ny] && !vis[nx][ny]){cout<<"YYY"<<endl;int v = nx*m+ny;q[rear++]= v;  //没办法把图中的节点装进队列,就用v节点记录,放进队列,需要时还原。 vis[nx][ny] = 1;fa[nx][ny] = u;dist[nx][ny] = dist[x][y] + 1;cout<<dist[nx][ny]<<endl;last_dir[nx][ny] = d;}}}}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);putchar(name[last_dir[x][y]]);}}int main(){  //第一个错误就是n和m重定义。造成bfs里面有了除零错误。。。。。 while(cin>>n>>m)  //输入行数和列数 {int x1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;  //输入其实位置和终止位置 for(int i = 0;i != n; i ++){for(int j = 0;j != m ; j ++){cin>>mat[i][j];  //由于是int型输入,所以一定要保证两个数字之间有空格 }}memset(vis,0,sizeof(vis));memset(dist,0,sizeof(dist));    bfs(x1,y1);    cout<<dist[x2][y2]<<endl;    print_path(x2,y2);}return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 数学细节丢分怎么办 感觉自己老了怎么办 小学拼音不过关怎么办 小学面试不过关怎么办 小学阅读不过关怎么办 孩子计算老出错怎么办 工作中总是马虎怎么办 孩子总是计算错误怎么办 做设计老是犯错怎么办 小学生阅读总出错怎么办 写作文没思路怎么办 孩子不爱写作文怎么办 写作文没有素材怎么办 写作文没有灵感怎么办 做事工作马虎粗心大意怎么办 小孩作业马虎粗心大意怎么办 孩子写字一直错怎么办 孩子写字老错怎么办 写错字涂黑了怎么办 写错字不能涂改怎么办 孩子爱写错别字怎么办 孩子读题马虎怎么办 孩子知错不该怎么办 小孩胆小反应慢怎么办 孩孑经常流鼻血怎么办 中考考号写错了怎么办 头后仰就头晕怎么办 感觉自己要晕倒怎么办 孩子不愿动手写字怎么办 老年人恶心想吐怎么办 小学生老写错别字怎么办 突然头晕站不稳 怎么办 早上起床突然天旋地转怎么办 躺着突然感觉天旋地转怎么办 眩晕症发作时怎么办 低血糖恶心想吐怎么办 更年期头晕头胀怎么办 年轻人头晕头胀怎么办 教案:《眯眼了怎么办》 迷路了怎么办活动意图 幼儿迷路了怎么办图片