poj3984迷宫问题
一个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迷宫问题的更多相关文章
- poj3984迷宫问题 广搜+最短路径+模拟队列
转自:http://blog.csdn.net/no_retreats/article/details/8146585 定义一个二维数组: int maze[5][5] = { 0, 1, 0, ...
- [poj3984]迷宫问题_bfs
迷宫问题 题目大意:给你一个5*5的矩阵,求左上角到左下角的最短路径. 注释:0或1的矩阵,1表示不能走,0表示能走,保证有唯一最短路径. 想法:bfs爆搜练习题.通过其实点,定义方向数组,然后进行b ...
- poj3984迷宫问题(DFS广搜)
迷宫问题 Time Limit: 1000MSMemory Limit: 65536K Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, ...
- 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, ...
- POJ-3984.迷宫问题(BFS + 路径输出)
昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...
- poj3984迷宫问题(dfs+stack)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35426 Accepted: 20088 Descriptio ...
- POJ3984 迷宫问题 —— BFS
题目链接:http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- POJ3984——迷宫问题
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31616 Accepted: 18100 Descriptio ...
- 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, ...
随机推荐
- jsmart 前结合案例
前绑定jsmart这是一个不错的选择.之前通过经常使用的项目中的.最近涉及的领域的后端部.jsmart有些使用相对较少,主要是因为他想引用文件,我写的模板,在一个简单的项目,直接使用js界,很复杂的前 ...
- bigdata_一篇文看懂Hadoop
本文转载:暂未找到原出处,如需署名 请联系 我们很荣幸能够见证Hadoop十年从无到有,再到称王.感动于技术的日新月异时,希望通过这篇内容深入解读Hadoop的昨天.今天和明天,憧憬下一个十年. 本文 ...
- linux_coom _ Linux文件比较,文本文件的交集、差集与求差
交集和差集操作在集合论相关的数学课上经常用到,不过,在Linux下 对文本进行类似的操作在某些情况下也很有用. comm命令 comm命令可以用于两个文件之间的 比较,它有一些选项可以用来调整输出,以 ...
- DRP学习进化模型
曾经做的就是按照思维做的三级制,这是U .B ,D .坐在坐,开始增加设计模式,增加sqlhelper ,逐渐了解系统可分为只三层,层的,随着学习的不断深入明确了"为什么会出现分层" ...
- javascript 验证 yyyy-MM-dd HH:mm:ss 的正则表达式
原文:javascript 验证 yyyy-MM-dd HH:mm:ss 的正则表达式 ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13 ...
- Visual Studio 2010 单元测试之一---普通单元测试
原文:Visual Studio 2010 单元测试之一---普通单元测试 本文以Visual Studio 2010为例,来介绍如何在Visual Studio里面进行单元测试. 首先来介绍普通单元 ...
- SQL Server 性能调优 之运行计划(Execution Plan)调优
运行计划中的三种 Join 策略 SQL Server 存在三种 Join 策略:Hash Join,Merge Join,Nested Loop Join. Hash Join:用来处理没有排过序/ ...
- leetcode第38题--Combination Sum
题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C ...
- POJ 3602 Typographical Ligatures
[题意简述]:题意就是输入一串字符串,问我们有多少种不同的字符,也就是说出现过一次的字符,下次就不记到种数中了,特别的有 ff, fi ,fl ,ffi ,ffl,'',``, 这几个每一个算是一种 ...
- jQuery无限级联下拉框插件
自己编写jQuery插件 之 无限级联下拉框 因为是级联,所以数据必须是树型结构的,我这里的测试数据如下: 看下效果图: 1.>图一: 2.>图二: 3.>图三: 由图可知,下拉 ...