简单bfs(hdu2612)
#include<stdio.h>
#include<string.h>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
//hdu2612,Y,M不能走
int s[210][210],lg[210][210],lg1[210][210];
int n,m;
struct node
{
int x;//hang
int y;//lie
}a,b,d[4050];
int bfs1(int a3,int b3)
{
queue<node> q;
a.x=a3;
a.y=b3;
q.push(a);
while(!(q.empty()))
{
a=q.front();
q.pop();
b.x=a.x+1,b.y=a.y;
if(b.x<n&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
b.x=a.x-1,b.y=a.y;
if(b.x>=0&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
b.x=a.x,b.y=a.y+1;
if(b.y<m&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
b.x=a.x,b.y=a.y-1;
if(b.y>=0&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
}
return 0;
}
int bfs2(int a4,int b4)
{
queue<node> q;
a.x=a4;
a.y=b4;
q.push(a);
while(!(q.empty()))
{
a=q.front();
q.pop();
b.x=a.x+1,b.y=a.y;
if(b.x<n&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
b.x=a.x-1,b.y=a.y;
if(b.x>=0&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
b.x=a.x,b.y=a.y+1;
if(b.y<m&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
b.x=a.x,b.y=a.y-1;
if(b.y>=0&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
}
return 0;
}
int main()
{
int a1,b1,a2,b2;
int min;
int i,j,k;
char c;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(lg,0,sizeof(lg));
memset(lg1,0,sizeof(lg1));
memset(s,0,sizeof(s));
a1=a2=b1=b2=0;
k=0;
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<m;j++)
{
scanf("%c",&c);
if(c=='Y')
a1=i,b1=j,s[i][j]=1;
else if(c=='M')
a2=i,b2=j,s[i][j]=1;
else if(c=='@')
{
d[k].x=i;
d[k].y=j;
k++;
}
else if(c=='#')
s[i][j]=1;
}
}
min=INF;
bfs1(a1,b1);
bfs2(a2,b2);
for(i=0;i<k;i++)
{
//printf("%d %d\n",lg[d[i].x][d[i].y],lg1[d[i].x][d[i].y]);
if(lg[d[i].x][d[i].y]+lg1[d[i].x][d[i].y]<min&&lg[d[i].x][d[i].y]!=0&&lg1[d[i].x][d[i].y]!=0)//小心Y或M到不了@的情况
min=lg[d[i].x][d[i].y]+lg1[d[i].x][d[i].y];
}
min=min*11;
printf("%d\n",min);
}
return 0;
}
简单bfs(hdu2612)的更多相关文章
- LightOJ 1012 简单bfs,水
1.LightOJ 1012 Guilty Prince 简单bfs 2.总结:水 题意:迷宫,求有多少位置可去 #include<iostream> #include<cstr ...
- POJ3185(简单BFS,主要做测试使用)
没事做水了一道POJ的简单BFS的题目 这道题的数据范围是20,所以状态总数就是(1<<20) 第一次提交使用STL的queue,并且是在队首判断是否达到终点,达到终点就退出,超时:(其实 ...
- 【POJ 3669 Meteor Shower】简单BFS
流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封 ...
- hdu1312 Red and Black 简单BFS
简单BFS模版题 不多说了..... 直接晒代码哦.... #include<cstdlib> #include<iostream> #include<cstdio> ...
- 逃脱 (简单BFS)
题目传送门 G逃脱 题目描述 这是mengxiang000和Tabris来到幼儿园的第四天,幼儿园老师在值班的时候突然发现幼儿园某处发生火灾,而且火势蔓延极快,老师在第一时间就发出了警报,位于幼儿园 ...
- poj2251 三维简单BFS
D - (热身)简单宽搜回顾 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- hdu2717Catch That Cow 简单BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717 刚开始思路错了,用的DP,一直WA,后来才发现是搜索,还是简单的BFS,顿时.... 思路: B ...
- luogu 2296 寻找道路 简单BFS
简单的BFS,练习基础 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #defi ...
- poj 3414(简单bfs)
题目链接:http://poj.org/problem?id=3414 思路:bfs简单应用,增对瓶A或者瓶B进行分析就可以了,一共6种状态. #include<iostream> #in ...
随机推荐
- python基础 列表 的用法及介绍
列表 首先定义一个列表 声明列表 列表名字=[值1,值2] list=[1,2,3,4,5] 这是一个列表,列表中有五个元素(1,2,3,4,5) 显示list列表 print list 输出 ...
- Vue.js搭建路由报错 router.map is not a function,Cannot read property ‘component’ of undefined
错误: 解决办法: 2.0已经没有map了,使用npm install vue-router@0.7.13 命令兼容1.0版本vue 但是安装完之后会出现一个错误: Cannot read prope ...
- SDOI2017 Round1
SDOI2017 Round1 在回去的车上写的 cnblog的markdown貌似有bug,空行都没有了 Day -several [清明节] 没想到在省选之前还会有一次放假 放假前一天晚上走到校门 ...
- BZOJ 3551: [ONTAK2010]Peaks加强版 [Kruskal重构树 dfs序 主席树]
3551: [ONTAK2010]Peaks加强版 题意:带权图,多组询问与一个点通过边权\(\le lim\)的边连通的点中点权k大值,强制在线 PoPoQQQ大爷题解传送门 说一下感受: 容易发现 ...
- WinSock IOCP 模型总结(附一个带缓存池的IOCP类)
前言 本文配套代码:https://github.com/TTGuoying/IOCPServer 由于篇幅原因,本文假设你已经熟悉了利用Socket进行TCP/IP编程的基本原理,并且也熟练的掌握了 ...
- 二维码开源库ZBar-windows下编译和使用
源码 下载最新Zbar源码(http://zbar.sourceforge.net/),网站的WIKI是空白的,所以只能在源码包里找使用说明了,很遗憾Windows下怎么编译没说明,只是说明了Wind ...
- QT开发应用程序的欢迎界面
主界面启动太慢,通常要10秒以上,所以想加个欢迎界面,等程序加载好再显示主界面. 主界面(类名为MainWindow)启动慢的原因是构造函数需要执行大量初始化的工作. 创建了Welcome类作为欢迎界 ...
- console那些你不曾知道的玩法
一.console最常见的四种方法: FireFox(58) Chrome(51) 二.打印对象: 平时想输出对象属性时,可以直接打印对象,对Object使用toString方法会得到 [Object ...
- iperf命令
iperf命令网络测试 iperf命令是一个网络性能测试工具.iperf可以测试TCP和UDP带宽质量.iperf可以测量最大TCP带宽,具有多种参数和UDP特性.iperf可以报告带宽,延迟抖动和数 ...
- css scale 元素放大缩小效果
<style> .trans-scale { width: 300px; height:300px; margin:100px auto; background:#99F; transit ...