一个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. mac_开启ftp并访问

    [启动&关闭] mac下一般用smb服务来进行远程文件访问,但要用FTP的话,高版本的mac os默认关掉了,可以用如下命令打开: sudo -s launchctl load -w /Sys ...

  2. Java 递归算法

    其基本思路是递归算法设计:对于一个复杂的问题,原问题分为几个子问题相似相对简单.继续下去,直到孩子可以简单地解决问题,这是导出复发,因此,有复发的原始问题已经解决. 关键是要抓住: (1)递归出口 ( ...

  3. 批处理获取IP地址

    setlocal ENABLEEXTENSIONS & set "i=0.0.0.0" & set "j=" for /f "toke ...

  4. Gaea是支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架

    Gaea是支持跨平台具有高并发.高性能.高可靠性,并提供异步.多协议.事件驱动的中间层服务框架 Gaea:58同城开源的中间层服务框架 https://github.com/58code/Gaea 中 ...

  5. C语言得到当前系统时间

    void getTime(){ //获取当前系统时间 time_t tTime;//距离1900年1月1日的秒数 char str[80]; struct tm* stTim;//时间结构 time( ...

  6. android项目总体界面架构(可直接复用)

    文章解读.效果图.源代码下载链接 http://blog.csdn.net/gao_chun/article/details/37903673

  7. or1200于IMMU分析

    以下摘录<步骤吓得核心--软-core处理器的室内设计与分析>一本书 1 IMMU结构 OR1200中实现IMMU的文件有or1200_immu_top.v.or1200_immu_tlb ...

  8. SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)

    原文:SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库) 场景 公司最近的sharepoint的数据库服务器老是出问题,并且在一旦出现问题,就导致无法正 ...

  9. 提高C#编程水平的50个要点 你掌握了多少呢?

    提高C#编程水平的50个要点,程序员都是追求极致的完美主义者,下面的这些注意点和要点,你都掌握运用了多少呢? 总是用属性(Property)来代替可访问的数据成员 在 readonly 和 const ...

  10. iOS文档序列化(对象归档)

    对象归档: 概念: 对象归档是指将对象写入文件保存在硬盘,当再次又一次打开程序时,能够还原这些对象.也称:对象序列化.对象持久化. 数据持久性的方式(事实上就是3类) 1,NSKeyedArchive ...