BFS入门
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
#define MAX 100
#define INF 0x3f3f3f3f
typedef pair<int ,int> P;
int sx,sy,gx,gy,n,m;
char maze[MAX][MAX];
int d[MAX][MAX];
int diraction[][]={{,},{,},{-,},{,-}};
P ser[MAX][MAX];
int bfs()
{
cin>>n>>m;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{ cin>>maze[i][j];
if(maze[i][j]=='S')
{
sx=i;
sy=j;
}
if(maze[i][j]=='G')
{
gx=i;
gy=j;
}
}
queue<P> que;
que.push(P(sx,sy));
memset(d,INF,sizeof(d));
d[sx][sy]=;
while(que.size())
{
P p=que.front();
que.pop();
int x=p.first,y=p.second;
if(x==gx&&y==gy) break;
for(int i=;i<;i++)
{
int cx=x+diraction[i][],cy=y+diraction[i][];
if(cx>=&&cx<n&cy>=&&cy<m&&d[cx][cy]==INF&&maze[cx][cy]!='#')
{
que.push(P(cx,cy));
d[cx][cy]=d[x][y]+;
ser[cx][cy].first=x;
ser[cx][cy].second=y;
}
}
}
return d[gx][gy];
}
void print(int x,int y)
{
if(x==sx&&y==sy)
{
cout<<'('<<sx<<','<<sy<<')'<<endl;
return ;
}
print(ser[x][y].first,ser[x][y].second);
cout<<'('<<x<<','<<y<<')'<<endl;
return ;
}
int main ()
{
cout<<bfs()<<endl;
print(gx,gy);
return ;
}
样例:
N=10, M=10(迷宫如下图所示。'#','.','S','G'分别表示墙壁、通道、起点和终点)
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
输出
22(附加坐标)
解析 : 广度优先搜索对树的每一层一次遍历,即筛选最短路径,用队列存储找到的元素(相对于深度优先搜索使用栈),其中可用pair类替换结构体;对于打印路径,因为每个节点的孩子只有一个双亲所以可以用孩子记录双亲依此找到最短路径坐标,对于非递归输出可用栈存储。
BFS入门的更多相关文章
- HDU1548- A strange lift (BFS入门)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A Strrange lift Time Limit: 2000/1000 MS (Java/ ...
- poj3278 BFS入门
M - 搜索 Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:65536KB 64bit I ...
- POJ 3278 抓奶牛(BFS入门题)
描述 农夫约翰已被告知逃亡牛的位置,并希望立即抓住她.他开始于一个点Ñ(0≤ Ñ ≤100,000)上的数线和牛是在点ķ(0≤ ķ上相同数目的线≤100,000).农夫约翰有两种交通方式:步行和传送. ...
- hdu 1242 Rescue(BFS入门)
第一次用容器做的BFS题目,题目有个地方比较坑,就是遍历时的方向,比如上下左右能AC,右上左下就WA #include <stdio.h> #include <string.h> ...
- HDU2717-Catch That Cow (BFS入门)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2717 Catch That Cow Time Limit: 5000/2000 MS (Java/O ...
- poj3278 【BFS】
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 97240 Accepted: 30519 ...
- POJ 3278 Catch That Cow[BFS+队列+剪枝]
第一篇博客,格式惨不忍睹.首先感谢一下鼓励我写博客的大佬@Titordong其次就是感谢一群大佬激励我不断前行@Chunibyo@Tiancfq因为室友tanty强烈要求出现,附上他的名字. Catc ...
- HDU1253 胜利大逃亡(BFS) 2016-07-24 13:41 67人阅读 评论(0) 收藏
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示 ...
- 【bfs】单向公路-C++
描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另一个城镇 ...
随机推荐
- ES6必知必会 (七)—— Generator 函数
Generator 函数 1.Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同,通常有两个特征: function关键字与函数名之间有一个星号: 函数体内部使 ...
- TASKER 定制你的手机让它在办公室时屏幕 30 分钟才灭
TASKER 定制你的手机让它在办公室时屏幕 30 分钟才灭 因为到的办公室,手机一直是充电的,不想屏幕太快关关掉,所以使用 TASKER 做了一个条件. 当 WIFI 连接到公司 WIFI 且充电中 ...
- python删除x天前文件及文件夹
#!/usr/bin/env python # -*- coding:utf-8 -*- import os, time, sys, shutil def delFiles(beforeSec, di ...
- CentOS 6.5 下HeartBeat的安装与配置
CentOS 6.5 下HeartBeat的安装与配置 参考网站: http://wenku.baidu.com/link?url=BvqJatdx1m12PLil-7YA1zkM0yUOEO8OnN ...
- [原][Java]eclipse 修改自动提示
下载 jar 链接:http://files.cnblogs.com/files/z5337/org.eclipse.jface.text_3.7.2.v20111213-1208.zip 或者这个: ...
- 安卓控件获取器uiautomatorviewer初体验:"unable to connect to the adb. check if adb is installed correctly"
解决方法:转自:https://plus.google.com/108487870030743970488/posts/2TrMqs1ZGQv Challenge Accepted:1. Screen ...
- django-admin添加权限
后台manage页面: 可以通过用户直接添加权限,如果需要添加多个权限,则可以通过组,先将多个权限添加个组(总经理,秘书),在个用户添加这个组(总经理,秘书). 代码实现: 实际就是添加多对多的关系 ...
- 225. Implement Stack using Queues + 232. Implement Queue using Stacks
▶ 栈和队列的相互表示.发现内置的队列和栈结构都十分高效,相互表示后性能损失都很小. ▶ 第 225 题,用队列实现栈 ● 自己的代码,3 ms,单队列实现,入栈 O(1),读取栈顶元素 O(n),出 ...
- [Z] Windbg以及vs debug使用
Windbg 一篇中国人写的质量非常高的Windbg文章:篇中国人写的质量非常高的Windbg文章: http://www.yiiyee.cn/Blog/windbg/ code project上的W ...
- 开启php的xdebug扩展及phpstorm配置xdebug,chrome调试插件组合
一. 开启php xdebug扩展 注意: 1. 原生php各版本需对应各自的xdebug版本,可到xdebug上对应下载 2. 若用wampserver等环境,wampse ...