一个5 × 5的二维数组,表示一个迷宫。其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

很简单的一道题,迷宫问题,一般都选择两种优先搜索方法去解,最短路线问题应该要用BFS,而不是DFS. 这道题目还需要记录路线,所以还加有存储父节点的一个空间。

贴代码如下(发现我只要是这两种方法,代码写的都不短啊):

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
typedef class{
public:
int x,y;
int fx,fy;
}vertex; int maze[][];
int trace[][]={};
vertex record[][];
void BFS()
{
vertex start,end,v,n;
start.x=;start.y=;
end.x=;end.y=;
trace[][]=;
record[][]=start;
queue<vertex> dfq;
vector<vertex> path;
dfq.push(start);
while(dfq.size()!=)
{
v=dfq.front();
dfq.pop();
if(v.x->=&&maze[v.x-][v.y]!=&&trace[v.x-][v.y]==)
{
trace[v.x-][v.y]=;
n.x=v.x-;n.y=v.y;n.fx=v.x;n.fy=v.y;
dfq.push(n);
record[n.x][n.y]=n;
}
if(v.x+<=&&maze[v.x+][v.y]!=&&trace[v.x+][v.y]==)
{
trace[v.x+][v.y]=;
n.x=v.x+;n.y=v.y;n.fx=v.x;n.fy=v.y;
dfq.push(n);
record[n.x][n.y]=n;
}
if(v.y->=&&maze[v.x][v.y-]!=&&trace[v.x][v.y-]==)
{
trace[v.x][v.y-]=;
n.x=v.x;n.y=v.y-;n.fx=v.x;n.fy=v.y;
dfq.push(n);
record[n.x][n.y]=n;
}
if(v.y+<=&&maze[v.x][v.y+]!=&&trace[v.x][v.y+]==)
{
trace[v.x][v.y+]=;
n.x=v.x;n.y=v.y+;n.fx=v.x;n.fy=v.y;
dfq.push(n);
record[n.x][n.y]=n;
}
}
int flag=,x=,y=;
while(flag)
{
vertex w=record[x][y];
path.push_back(w);
if(x==&&y==) flag=;
else{
x=w.fx;y=w.fy;
}
}
for(int i=path.size()-;i>=;i--)
{
cout<<"("<<path[i].x<<", "<<path[i].y<<")"<<endl;
}
} int main()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
{
cin>>maze[i][j];
}
BFS();
return ;
}

poj3984迷宫问题的更多相关文章

  1. poj3984迷宫问题 广搜+最短路径+模拟队列

    转自:http://blog.csdn.net/no_retreats/article/details/8146585   定义一个二维数组: int maze[5][5] = { 0, 1, 0, ...

  2. [poj3984]迷宫问题_bfs

    迷宫问题 题目大意:给你一个5*5的矩阵,求左上角到左下角的最短路径. 注释:0或1的矩阵,1表示不能走,0表示能走,保证有唯一最短路径. 想法:bfs爆搜练习题.通过其实点,定义方向数组,然后进行b ...

  3. poj3984迷宫问题(DFS广搜)

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

  4. Poj3984 迷宫问题 (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, ...

  5. POJ-3984.迷宫问题(BFS + 路径输出)

    昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...

  6. poj3984迷宫问题(dfs+stack)

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

  7. POJ3984 迷宫问题 —— BFS

    题目链接:http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  8. POJ3984——迷宫问题

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

  9. POJ-3984 迷宫问题(BFS找最短路径并保存)

    问题: 定义一个二维数组:  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, ...

随机推荐

  1. 经典算法题每日演练——第十四题 Prim算法

    原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...

  2. sql server 辅助工具

    sql Prompt 智能感知, 也是需要注册机. 效果如图: 这里最好改下:

  3. C#中实现WebBrowser控件的HTML源代码读写

    原文:C#中实现WebBrowser控件的HTML源代码读写 C#中实现WebBrowser控件的HTML源代码读写http://www.blogcn.com/user8/flier_lu/index ...

  4. hdu 4893 Wow! Such Sequence!

    http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d - "add" 2 l r - "query sum ...

  5. IOS中 类扩展 xib

    一.类扩展(class extension,匿名分类) .格式 @interface 类名 () { // 成员变量... } // 方法声明... @end .作用 > 写在.m文件中 > ...

  6. expected number,sequence,or string.map evaluated instead of freemarker.template.smplehash

    expected number,sequence,or string.map evaluated instead of freemarker.template.smplehash 使用freemark ...

  7. MVC5 + EF6 + Bootstrap3-10

    MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 上一节:MVC5 + EF6 + Bootstrap3 (9) HtmlHelper用法大全(下) 源码下载:点我下载 目录 前 ...

  8. SQL点滴16—SQL分页语句总结

    原文:SQL点滴16-SQL分页语句总结 今天对分页语句做一个简单的总结,他们大同小异的,只要理解其中一个其他的就很好理解了. 使用top选项 *from Orders orderid from Or ...

  9. CSS学习笔记:Media Queries

    CSS3提供了Media Queries(媒体查询)的概念,可以利用它查询以下数据: 1.浏览器窗口的宽和高: 2.设备的宽和高: 3.设备的手持方向,横向/竖向: 4.分辨率. @media规则的语 ...

  10. MySQL之 ALTER vs CHANGE vs MODIFY COLUMN

    1.ALTER COLUMN 用于设置或者移除某一列的默认(缺省)值, 1.1用法 ALTER TABLE MyTable ALTER COLUMN foo SET DEFAULT 'bar'; AL ...