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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端开发APP,从HBuilder开始~

    前端开发APP,从HBuilder开始~内容简介介绍目前前端人员开发app的几种方法,具体介绍hbuilder开发app,一扇赞新的大门~无所不能的js最开始js仅仅局限于网页上一些效果,操作网页内容等,但是nodejs把js带入了后端,也就是服务器端,从此前端人员可以涉及后端,前后通吃,native.js(以及其他js,稍候介绍)把js带入了移动端,从此前端人员前后移动通吃。前端涉及app的两种

    2022年5月31日
    56
  • ubuntu安装Qt creator

    ubuntu安装Qt creatorUbuntu安装Qtcreator#ubuntu版本16.04#Qt不限版本

    2022年10月15日
    2
  • layoutSubviews触发问题

    layoutSubviews触发问题layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews 2、addSubview会触发layoutSubviews 3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 4、滚动一个UIScrollView会触发layoutSubviews 5、旋转Screen会触发父UIView上的layo…

    2022年7月25日
    14
  • java list三种遍历方法性能比較

    java list三种遍历方法性能比較

    2021年9月1日
    58
  • Unity+OpenCV 人脸识别追踪

    Unity+OpenCV 人脸识别追踪项目需要一个人脸识别追踪的效果,所以查找了一些资料,自己做了一个功能,基本效果已经实现了。首先项目需要OpenCV的开发环境,所以首先一定要在开发电脑上装上OpenCV的开发环境,流程很简单,直接去http://opencv.org/downloads.html官网下载OpenCV的安装文件就可以了,然后配置电脑的环境变量。我的电脑是windows操作系统配置好就是这个样子,然后要把用到的

    2022年5月29日
    130
  • CUDA性能优化—-kernel调优(nvprof工具的使用)

    CUDA性能优化—-kernel调优(nvprof工具的使用)1、引言本文主要介绍并行分析,涉及掌握nvprof的几个metrics参数,所用的例子是CUDA性能优化—-线程配置一文中所提到的sumMatrix2D.cu例子。接下来本文会做一些列的试验,测试环境:TeslaM2070一块,CUDA6.0,操作系统:RedHat4.1.2-50,gccversion4.1.220080704首先回顾一下sumMatrix2D的kern…

    2022年6月11日
    32

发表回复

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

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