题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)
2016-04-12 18:28
274 查看
题目描述:
sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫。
sun的室友在帮电脑节设计迷宫,所以室友就请sun帮忙计算下走出迷宫的最少步数。
知道了最少步数就可以辅助控制比赛难度以及去掉一些没有路径到达终点的map。
比赛规则是:从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走。
输入:
输入有多组数据。
每组数据输入n(0<n<=100),然后输入n*n的01矩阵,0代表该格子没有障碍,为1表示有障碍物。
注意:如果输入中的原点和终点为1则这个迷宫是不可达的。
输出:
对每组输入输出该迷宫的最短步数,若不能到达则输出-1。
样例输入:
样例输出:
核心代码(百度):
structNode
{
intx;
inty;
intstep;
Node(intx1,inty1,intstep1):x(x1),y(y1),step(step1){}
};
intBFS()
{
Nodenode(0,0,0);
queue<Node>q;
while(!q.empty())q.pop();
q.push(node);
while(!q.empty())
{
node=q.front();
q.pop();
if(node.x==n-1&&node.y==n-1)
{
returnnode.step;
}
visit[node.x][node.y]=1;
for(inti=0;i<4;i++)
{
intx=node.x+stepArr[i][0];
inty=node.y+stepArr[i][1];
if(x>=0&&y>=0&&x<n&&y<n&&visit[x][y]==0&&mazeArr[x][y]==0)
{
visit[x][y]=1;
Nodenext(x,y,node.step+1);
q.push(next);
}
}
}
return-1;
}
sun所在学校每年都要举行电脑节,今年电脑节有一个新的趣味比赛项目叫做闯迷宫。
sun的室友在帮电脑节设计迷宫,所以室友就请sun帮忙计算下走出迷宫的最少步数。
知道了最少步数就可以辅助控制比赛难度以及去掉一些没有路径到达终点的map。
比赛规则是:从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走。
输入:
输入有多组数据。
每组数据输入n(0<n<=100),然后输入n*n的01矩阵,0代表该格子没有障碍,为1表示有障碍物。
注意:如果输入中的原点和终点为1则这个迷宫是不可达的。
输出:
对每组输入输出该迷宫的最短步数,若不能到达则输出-1。
样例输入:
2 0 1 0 0 5 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0
样例输出:
28
核心代码(百度):
structNode
{
intx;
inty;
intstep;
Node(intx1,inty1,intstep1):x(x1),y(y1),step(step1){}
};
intBFS()
{
Nodenode(0,0,0);
queue<Node>q;
while(!q.empty())q.pop();
q.push(node);
while(!q.empty())
{
node=q.front();
q.pop();
if(node.x==n-1&&node.y==n-1)
{
returnnode.step;
}
visit[node.x][node.y]=1;
for(inti=0;i<4;i++)
{
intx=node.x+stepArr[i][0];
inty=node.y+stepArr[i][1];
if(x>=0&&y>=0&&x<n&&y<n&&visit[x][y]==0&&mazeArr[x][y]==0)
{
visit[x][y]=1;
Nodenext(x,y,node.step+1);
q.push(next);
}
}
}
return-1;
}
相关文章推荐
- Qconf配置管理工具-Java使用文档
- Cocos2dx:用Photoshop自动创建CocosStudio.csd文件——cocos3.10
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- 面试问题及答案小结
- Swift基础类型
- python实现简单爬虫
- 集合类 Contains 方法 深入详解 与接口的实例
- manifest.mf 详解
- 使用memcache 存储session
- Fbric、Ansible、Docker、Chaos Monkey:DevOps工具的年中回顾
- 感兴趣的文章搜集
- EditBox注册返回键和点击空白返回时候输入内容不能写入游戏
- 装系统(1)
- IOS下的 NSTimer与Run loop Modes
- CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found
- css之提高渲染性能的写法
- 在Android中通过Java修改文件权限
- HDU 2686 Matrix(最大费用流)
- 各个方法的不同和优缺点
- 第四章读书笔记——进程调度