POJ--3984--迷宫问题
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
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--迷宫问题相关推荐
- 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】
POJ3126Prime Path 给定两个四位素数a b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位 ...
- 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, ...
- POJ 3984 迷宫问题 BFS DFS两种解法
题目地址:点这里 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Descr ...
- POJ 3984 迷宫问题 BFS求最短路线+路径记录
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31050 Accepted: 17826 Descriptio ...
- 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, ...
- (简单) 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, ...
- poj 3984 迷宫问题 BFS
/* 题目: 求最少时间从(0,0)走到(4,4)的路径 分析: 纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标, 因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都 ...
- K - 迷宫问题 POJ - 3984
K - 迷宫问题 POJ - 3984 5*5迷宫,输出从(0,0)走到(4,4)的最短路径 类似康托,自己弄个一一对应的公式即可 #include<iostream> #include& ...
- 迷宫问题 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 ...
- POJ - 3984+POJ - 3414(BFS+路径记录)
题目一 迷宫问题 题目链接: http://poj.org/problem?id=3984 题目: Description 定义一个二维数组: int maze[5][5] = {0, 1, 0, 0 ...
最新文章
- 学好C++,一个项目就够
- 三十三、Java集合中的LinkedList
- WinJS实用开发技巧(4):Appbar中使用自定义图片
- hadoop streaming编程小demo(python版)
- Linux编程make命令
- Cloudera Manager 5和CDH5(最新版5.1.3) 安装
- wince下的地址映射知识点滴
- 三千万海外用户的天才程序员之死
- 18. Magento 细节
- Flutter 2.5正式版发布,带来重大更新
- Maven cmd 打包命令
- python实现excel表格图片识别,并转换成excel文件
- mysql中有关视图的概念、操作及作用
- 几个简单的小功能,能提高微信群活跃度?
- nividia 自定义分辨率整合进了显示器原生支持的分辨率,如何删除
- Android多进程从头讲到尾,成功定级腾讯T3-2
- 一些java语言的精巧写法
- 记-阿里开发手册规范(JAVA)
- mysql取数据库时间函数_MySQL数据库—日期与时间函数
- 电子电路学习笔记(17)——蜂鸣器