hdoj2612 Find a way (bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612
思路:
这个题我wa了十多发QAQ。
刚开始的思路是搜索每个‘@’,然后广搜该点到Y和M的最小距离之和,最后取最小值,然后TLE了。后来换个角度,可以从Y和M分别广搜到每个‘@’的距离,这样就只用bfs两次,不用担心超时。但这个题坑点在KFC也可以当作路,Y和M也可以当作路。
AC代码如下:
#include<bits/stdc++.h>
using namespace std; struct node{
int x,y,s;
}tmp; int n,m;
char a[][];
int vis[][];
int b[][][];
int go[][]={-,,,,,,,-}; void bfs(int x,int y,int k){
memset(vis,,sizeof(vis));
queue<node> q;
vis[x][y]=;
tmp.x=x,tmp.y=y,tmp.s=;
q.push(tmp);
while(!q.empty()){
node now=q.front();q.pop();
int nx=now.x,ny=now.y,ns=now.s;
if(a[nx][ny]=='@')
b[k][nx][ny]=ns;
for(int i=;i<;i++){
int xx=nx+go[i][],yy=ny+go[i][];
if(xx>=&&xx<n&&yy>=&&yy<m&&a[xx][yy]!='#'&&!vis[xx][yy]){
vis[xx][yy]=;
tmp.x=xx,tmp.y=yy,tmp.s=ns+;
q.push(tmp);
}
}
}
} int main(){
while(scanf("%d%d",&n,&m)!=EOF){
int res=0x3f3f3f3f;
for(int i=;i<n;i++)
scanf("%s",a[i]);
for(int i=;i<n;i++)
for(int j=;j<m;j++){
if(a[i][j]=='Y') bfs(i,j,);
if(a[i][j]=='M') bfs(i,j,);
}
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(a[i][j]=='@'&&b[][i][j]&&b[][i][j])
if(res>b[][i][j]+b[][i][j])
res=b[][i][j]+b[][i][j];
printf("%d\n",*res);
}
return ;
}
hdoj2612 Find a way (bfs)的更多相关文章
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- Sicily 1215: 脱离地牢(BFS)
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...
- Sicily 1048: Inverso(BFS)
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
- Sicily 1051: 魔板(BFS+排重)
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...
- Sicily 1150: 简单魔板(BFS)
此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...
随机推荐
- ThinkJava-多态
8.2.1 方法调用绑定 解决的办法就是后期绑定,它的含义就是在运行时根据对象的类型进行绑定.后期绑定也 叫做动态绑定或运行时绑定.如果一种语言想实现后期绑定,就必须具有某种机制,以便在运 行时能判断 ...
- [转]ASP.net Application 生命周期事件
生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global. ...
- 接口测试3-2csv格式
csv文件数据 IntellJ IDEA打开终端:view-tool windows-terminal,可以在终端中查看文件路径 阿里 马云 京东 刘强东 京东 马化腾 #java //读取csv文件 ...
- Splunk 交流
1. 初识splunk Splunk Enterprise Splunk Free Splunk Universal Forwarder,通用转发器
- windows 网管常用命令
Windows网络命令行程序 这部分包括: 使用 ipconfig /all 查看配置 使用 ipconfig /renew 刷新配置 使用 ipconfig 管理 DNS 和 DHCP 类别 ID ...
- python 之 决策树分类算法
发现帮助新手入门机器学习的一篇好文,首先感谢博主!:用Python开始机器学习(2:决策树分类算法) J. Ross Quinlan在1975提出将信息熵的概念引入决策树的构建,这就是鼎鼎大名的ID3 ...
- CA证书认证单向和双向的区别
我觉得最科学的应该是,单向的,每次客户端发两把锁住的东西给服务端,服务端解密两次,服务端用客户端发来的对称密钥加密数据,发送给客户端,客户端只需解密一次,然后客户端每次修改随机密码,传给服务端,服务 ...
- python输入输出及变量
知识内容: 1.python输出及注释 2.变量及常量 3.python用户输入 4.Hello,World程序 一.python输出及注释 1.python输出 在python2和python3中的 ...
- uva-10054-欧拉回路
题意:一个项链上面的每一个珠子有俩种颜色,前面一个珠子后面的颜色和后面珠子的前面颜色一样,有一天它断了, 一个人去搜集,问,搜集到的珠子能不能再次串成项链 原以为是链表,原来链表这组数据过不了. 71 ...
- UVA196
#include<stdio.h> #include<iostream> #include <strstream> using namespace std; #de ...