迷宫问题
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 11806   Accepted: 7072

Description

定义一个二维数组:

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)
思路:广搜,但是需要用栈来记录路径,具体的就看代码吧。不是很难,应该能看懂。
ac代码:
#include<stdio.h>
#include<stack>
#include<queue>
#include<string.h>
#include<algorithm>
using namespace std;
int map[5][5],vis[110][110],cx[4]={0,0,1,-1},cy[4]={1,-1,0,0};
struct node{//prex和prey用来记录路径 int x,y,prex,prey,step;friend bool operator < (node a,node b){return a.step>b.step;}
}now,next,path[5][5];
struct pre{ //专门用来记录路径,因为路径是从终点回到起点的,所以放到栈里比较合适。 int x,y;
};
int jud(int x,int y){//判断这一步是否合法。 if(x<0||x>4||y<0||y>4)return 0;if(vis[x][y]==1||map[x][y])return 0;
return 1;
}
void print(int sx,int sy){stack<pre>p;pre temp={sx,sy};node rec;//记录路径用。 p.push(temp);while(1){rec=path[temp.x][temp.y];temp.x=rec.prex;temp.y=rec.prey;p.push(temp);if(temp.x==0&&temp.y==0)break; }while(!p.empty()){temp=p.top();p.pop();printf("(%d, %d)\n",temp.x,temp.y);}
}
void bfs(){priority_queue<node>q;now.x=now.y=now.step=0;q.push(now);memset(vis,0,sizeof(vis));vis[0][0]=1;while(!q.empty()){now=q.top();q.pop();if(now.x==4&&now.y==4){path[now.x][now.y]=now; print(4,4);return ;}for(int i=0;i<4;i++){next.x=now.x+cx[i];next.y=now.y+cy[i];next.step=now.step+1;if(jud(next.x,next.y)){vis[next.x][next.y]=1;next.prey=now.y;next.prex=now.x;next.step=now.step+1;path[next.x][next.y]=next;if(next.x==4&&next.y==4){print(4,4);return ;}q.push(next);}}}
}
int main(){for(int i=0;i<5;i++)for(int j=0;j<5;j++)scanf("%d",&map[i][j]);bfs();return 0;
}
												

POJ--3984--迷宫问题相关推荐

  1. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  2. POJ 3984 迷宫问题 (Dijkstra)

    迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...

  3. POJ 3984 迷宫问题 BFS DFS两种解法

    题目地址:点这里 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Descr ...

  4. POJ 3984 迷宫问题 BFS求最短路线+路径记录

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31050   Accepted: 17826 Descriptio ...

  5. 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, ...

  6. (简单) POJ 3984 迷宫问题,BFS。

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  7. poj 3984 迷宫问题 BFS

    /* 题目: 求最少时间从(0,0)走到(4,4)的路径 分析: 纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标, 因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都 ...

  8. K - 迷宫问题 POJ - 3984

    K - 迷宫问题 POJ - 3984 5*5迷宫,输出从(0,0)走到(4,4)的最短路径 类似康托,自己弄个一一对应的公式即可 #include<iostream> #include& ...

  9. 迷宫问题 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 ...

  10. POJ - 3984+POJ - 3414(BFS+路径记录)

    题目一 迷宫问题 题目链接: http://poj.org/problem?id=3984 题目: Description 定义一个二维数组: int maze[5][5] = {0, 1, 0, 0 ...

最新文章

  1. 学好C++,一个项目就够
  2. 三十三、Java集合中的LinkedList
  3. WinJS实用开发技巧(4):Appbar中使用自定义图片
  4. hadoop streaming编程小demo(python版)
  5. Linux编程make命令
  6. Cloudera Manager 5和CDH5(最新版5.1.3) 安装
  7. wince下的地址映射知识点滴
  8. 三千万海外用户的天才程序员之死
  9. 18. Magento 细节
  10. Flutter 2.5正式版发布,带来重大更新
  11. Maven cmd 打包命令
  12. python实现excel表格图片识别,并转换成excel文件
  13. mysql中有关视图的概念、操作及作用
  14. 几个简单的小功能,能提高微信群活跃度?
  15. nividia 自定义分辨率整合进了显示器原生支持的分辨率,如何删除
  16. Android多进程从头讲到尾,成功定级腾讯T3-2
  17. 一些java语言的精巧写法
  18. 记-阿里开发手册规范(JAVA)
  19. mysql取数据库时间函数_MySQL数据库—日期与时间函数
  20. 电子电路学习笔记(17)——蜂鸣器

热门文章

  1. 如何高效工作,享受品质生活?看看少数派的经验总结吧
  2. Android系统级深入开发——移植与调试
  3. 17.3加入知识的文本增强
  4. 6.6 BERT家族02——sentence-BERT、BioBERT
  5. python字符串、字符串处理函数及字符串相关操作
  6. keras可视化模型训练过程
  7. php手术多久就不疼了,自己腹部刚开刀口没几天,却站了5小时为患者手术
  8. java 焦点转移_将焦点移至键Enter上的下一个控件
  9. DevEco Studio 使用和问题总结
  10. Kotlin — 适用于 Web 开发