博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迷宫问题,POJ-3984
阅读量:4316 次
发布时间:2019-06-06

本文共 1694 字,大约阅读时间需要 5 分钟。

定义一个二维数组: 
int maze[5][5] = { 	0, 1, 0, 0, 0, 	0, 1, 0, 1, 0, 	0, 0, 0, 0, 0, 	0, 1, 1, 1, 0, 	0, 0, 0, 1, 0, };
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0

Sample Output

(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4)   思路:搜索题(用广搜比较方便,因为还要记录信息),但是要输出每一步的经过哪个位置,使用结构体指针进行回溯输出每一步的信息。(也可以用其他方法存储信息,比如结构体数组, 一维数组之类的)。要注意,声明结构体指针时,要及时分配内存首地址,不然会报错,使用malloc函数。代码如下:
#include 
#include
#include
#include
#include
#include
using namespace std;int dd[4][2]={ 1,0,0,1,-1,0,0,-1} ;int mp[5][5];int used[5][5];struct node{ int x,y;//坐标 int step;//记录步数 node *last;//结构体指针};bool judge(int x,int y){ return x>=0&&x<5&&y>=0&&y<5;}node* bfs(int x,int y){ memset(used,0,sizeof(used)); node *s; s=(node *)malloc(sizeof(node));//注意分配内存 s->x=x,s->y=y,s->step=0; s->last=NULL; queue
q; q.push(s); while(!q.empty()) { s=q.front();q.pop(); if(s->x==4&&s->y==4)return s; for(int i=0;i<4;i++) { int nx=s->x+dd[i][0]; int ny=s->y+dd[i][1]; if(judge(nx,ny)&&used[nx][ny]==0&&mp[nx][ny]==0) { used[nx][ny]=1; node *e;//当某个点能走时,声明一个新的结构指针e,它的*last指向上一步(即s),如此重复下去,当走到终点时,进行回溯可得到每一步的信息。 e=(node *)malloc(sizeof(node)); e->x=nx,e->y=ny; e->step=s->step+1; e->last=s; q.push(e); } } } return NULL;}void output(node *s){ if(s==NULL)return; output(s->last); printf("(%d, %d)\n",s->x,s->y);}int main(){ for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { scanf("%d",&mp[i][j]); } } output(bfs(0,0)); return 0;}

 

转载于:https://www.cnblogs.com/whocarethat/p/11107872.html

你可能感兴趣的文章
Cookie/Session机制具体解释
查看>>
ATMEGA16 IOport相关汇总
查看>>
有意思的cmd命令
查看>>
js正則表達式语法
查看>>
Git学习系列-Git基本概念
查看>>
c#多个程序集使用app.config 的解决办法
查看>>
Linux+Apache+PHP+MySQL服务器环境配置(CentOS篇)
查看>>
Linux下获取本机IP地址的代码
查看>>
(C#)调用Webservice,提示远程服务器返回错误(500)内部服务器错误
查看>>
flex布局
查看>>
python-----python的文件操作
查看>>
java Graphics2d消除锯齿,使字体平滑显示
查看>>
控件中添加的成员变量value和control的区别
查看>>
Spring Boot Docker 实战
查看>>
Div Vertical Menu ver3
查看>>
Git简明操作
查看>>
InnoDB为什么要使用auto_Increment
查看>>
HDU 1087 Super Jumping! Jumping! Jumping!
查看>>
0007_初始模块和字节码
查看>>
[效率提升]如何管理好你的电脑文件
查看>>