poj3984迷宫问题_迷宫代码

poj3984迷宫问题_迷宫代码POJ 3984 迷宫问题

大家好,又见面了,我是你们的朋友全栈君。

迷宫问题

定义一个二维数组: 


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 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

本题的关键在于使用一维结构数组模拟的队列来保存符合要求的最短路径。
 1 #include <iostream>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 
 6 int maze[5][5];        //迷宫
 7 int visited[5][5];    //迷宫的访问状态
 8 int dx[4] = { 1,-1,0,0 };    //上下方向
 9 int dy[4] = { 0,0,1,-1 };    //左右方向
10 
11 struct node
12 {
13     int x, y;    //迷宫中的坐标(x,y)
14     int pre;    //(x,y)坐标的前驱
15 }q[100];    //模拟的队列
16 
17 int front = 0, rear = 1;    //front指向队首元素,rear指向队尾元素的下一个位置
18 
19 void print(int front)
20 {
21     if (q[front].pre != -1)        //这里并没有打印到起点
22     {
23         print(q[front].pre);    //使用递归进行逆序打印
24         printf("(%d, %d)\n", q[front].x, q[front].y);
25     }
26 }
27 
28 void bfs(int x, int y)
29 {
30     memset(visited, 0, sizeof(visited));    
31     visited[0][0] = 1;
32     q[0].x = x;
33     q[0].y = y;
34     q[0].pre = -1;
35 
36     while (front <= rear)    //队列不为空
37     {
38         if (q[front].x == 4 && q[front].y == 4)
39         {
40             print(front);
41             return;
42         }
43         for (int i = 0; i < 4; ++i)
44         {
45             int r = dx[i] + q[front].x;
46             int c = dy[i] + q[front].y;
47             if (r < 0 || c < 0 || r >= 5 || c >= 5 || maze[r][c] == 1 || visited[r][c])
48                 continue;
49 
50             visited[r][c] = 1;    //该点访问状态置为1
51 
52             //入队
53             q[rear].x = r;    
54             q[rear].y = c;
55             q[rear].pre = front;
56             ++rear;
57         }
58         ++front;    //队首元素出队
59     }
60     
61 }
62 
63 
64 
65 int main()
66 {
67     for (int i = 0; i < 5; ++i)
68         for (int j = 0; j < 5; ++j)
69             cin >> maze[i][j];
70 
71     cout << "(0, 0)" << endl;
72     bfs(0, 0);
73 
74 
75     return 0;
76 }

 

转载于:https://www.cnblogs.com/FengZeng666/p/10401627.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106998.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • intellij idea激活成功教程版安装步骤_IntelliJ IDEA激活成功教程版

    intellij idea激活成功教程版安装步骤_IntelliJ IDEA激活成功教程版参考文章:1、里面有idea2018网盘下载地址idea2018激活成功教程版下载解压完:2、详细安装图解:IntelliJIDEA下载安装(含注册码)傻瓜式安装即可哈哈,安装完run配置一路点击next,这里配置的功能,以后也可以修改,所以不用担心。…

    2022年10月9日
  • Google Borg论文[通俗易懂]

    Google Borg论文[通俗易懂]Borg的论文逐字翻译,拒绝机器翻译,有一些自己的理解,不一定对,作为参考就行

    2022年10月22日
  • route add怎么用_centos route add

    route add怎么用_centos route add1.具体功能 该命令用于在本地IP路由表中显示和修改条目。使用不带参数的ROUTE可以显示帮助。 2.语法详解 route[-f][-p][command[destination][masknetmask][gateway][metricmetric][ifinte***ce] 3.参数说明 -f 清除所有不是主路由(子网掩码为255.255.255.

    2022年8月12日
  • 心脏出血漏洞利用「建议收藏」

    心脏出血漏洞利用「建议收藏」0x0引言~心脏出血(英语:Heartbleed),也简称为心血漏洞,是一个出现在加密程序库OpenSSL的安全漏洞,该程序库广泛用于实现互联网的传输层安全(TLS)协议。它于2012年被引入了软件中,2014年4月首次向公众披露。只要使用的是存在缺陷的OpenSSL实例,无论是服务器还是客户端,都可能因此而受到攻击。此问题的原因是在实现TLS的心跳扩展时没有对输入进行适当验证(缺少边界检查),…

    2022年7月17日
  • 瓦片地图拼接_开源瓦片地图

    瓦片地图拼接_开源瓦片地图瓦片地图(TiledMap)瓦片地图(TileMap)不但生成简单,并且可以灵活的用于Cocos2d-x引擎。不论你的游戏是角色扮演游戏,平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源的瓦片地图编辑器TiledMapEditor生成并保存为TMX文件格式,被Cocos2d-x支持。TMX瓦片地图格式Cocos2d支持被Tiled创建的地图文件(TMX)。Tiled的2个版本…

    2022年10月22日
  • Protecting World Leaders Against Deep Fakes(CVPR 2020)

    Protecting World Leaders Against Deep Fakes(CVPR 2020)文章目录IntroductionInnovationMethodExperimentProtectingWorldLeadersAgainstDeepFakes(CVPR2020)paperPDFIntroduction深度学习的应用促使了人脸伪造技术的巨大进步。现有AI-合成的人脸伪造方式可以分为以下三种:faceswap:将视频中出现的人脸替换为其他人的脸,一般对整个面部进行对齐和替换lip-sync:使得视频中的人物口型按照既定音频变化,一般仅伪造目标的唇部区域pupp

    2022年5月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号