题目链接: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)的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. shell 10流程控制

    if 判断 if #shell #!/bin/sh a=5 if [[ $a > 3 ]];then echo "$a>3" fi #写成一行 if [[ $a < ...

  2. 洛谷 P1197 [JSOI2008]星球大战

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道 ...

  3. web service初探

    概述:Web service是一个平台独立.低耦合的.自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发 ...

  4. Vuex以及axios 看这个

      vuex  -- 安装   npm i vuex  -- 配置   -- 导入vuex      import vuex from "vuex"   -- vue使用vuex  ...

  5. [Dart] Flutter 上传文件

    /** * 请求响应数据 */ class MsgResponse { int code; // 状态代码,0 表示没有错误 Object data; // 数据内容,一般为字符串 String er ...

  6. jmeter-noguimodel

    jmeter -Dthreads= -n -t ~/Desktop/image-controller.jmx -l myimage/out -e -o myimage/log -j myimage/r ...

  7. OpenCL 归约 1

    ▶ 照着书上的代码,写了几个一步归约的计算,只计算一步,将原数组归约到不超过 1024 个工作项 ● 代码 // kernel.cl __kernel void reduce01(__global u ...

  8. 18.OGNL与ValueStack(VS)-值栈入门

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 下面我们建立struts2ognl项目来练习ognl的使用. 步骤一.搭建s ...

  9. WDA-FPM-1-Roadmap(GAF)

    转载:https://www.cnblogs.com/sapSB/p/10077564.html 首先要有个简单的认识: 1.FPM支持的几种UI配置界面接口: Object Instance Flo ...

  10. gulp 用法 小结

    前端们,gulp该用起来了,简单的demo入门 gulp.grunt前端自动化工具,只有用过才知道多么重要. 作者:一文不提来源:博客园|2015-05-28 10:35 移动端 收藏 分享 gulp ...