题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612

BFS搜索  目标地  并记录下来  之后再判断两段路程之和

代码:

 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <ctype.h>
#include <iomanip>
#include <queue>
#include <stdlib.h>
using namespace std; #define INF 0x3f3f3f3f
#define N 220
#define M 220
int n,m;
char mp[N][M];
int vis1[N][M],vis2[N][M];
int ans1[N][M],ans2[N][M];
int dx[]={,,,-};
int dy[]={,-,,}; struct node
{
int x,y;
int t;
}; node g1,g2;
void getMp()
{
for(int i=; i<n; i++){
for(int j=; j<m; j++){
cin>>mp[i][j];
if(mp[i][j]=='Y'){
g1.x=i;
g1.y=j;
g1.t=;
vis1[i][j]=;
}
if(mp[i][j]=='M'){
g2.x=i;
g2.y=j;
g2.t=;
vis2[i][j]=;
}
}
}
} void bfs1()
{
queue<node> q;
while(!q.empty())
q.pop();
q.push(g1);
while(!q.empty()){
node f1;
f1=q.front();
q.pop();
for(int i=; i<; i++){
node f2;
f2.x=f1.x+dx[i];
f2.y=f1.y+dy[i];
f2.t=f1.t;
if(<=f2.x&&f2.x<n&&<=f2.y&&f2.y<m&&!vis1[f2.x][f2.y]&&mp[f2.x][f2.y]!='#'){
f2.t++;
if(mp[f2.x][f2.y]=='@'){
ans1[f2.x][f2.y]=f2.t;
}
vis1[f2.x][f2.y]=;
q.push(f2);
}
}
}
} void bfs2()
{
queue<node> q;
while(!q.empty())
q.pop();
q.push(g2);
while(!q.empty()){
node f1;
f1=q.front();
q.pop();
for(int i=; i<; i++){
node f2;
f2.x=f1.x+dx[i];
f2.y=f1.y+dy[i];
f2.t=f1.t;
if(<=f2.x&&f2.x<n&&<=f2.y&&f2.y<m&&!vis2[f2.x][f2.y]&&mp[f2.x][f2.y]!='#'){
f2.t++;
if(mp[f2.x][f2.y]=='@'){
ans2[f2.x][f2.y]=f2.t;
}
vis2[f2.x][f2.y]=;
q.push(f2);
}
}
}
} int main()
{
while(~scanf("%d %d",&n,&m)){
memset(ans1,-,sizeof(ans1));
memset(ans2,-,sizeof(ans2));
memset(vis1,,sizeof(vis1));
memset(vis2,,sizeof(vis2));
getMp();
bfs1();
bfs2();
int min=INF;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
if(ans1[i][j]+ans2[i][j]<min&&ans1[i][j]+ans2[i][j]>)
{
min=ans1[i][j]+ans2[i][j];
}
}
printf("%d\n",min*);
}
}

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 ...

  10. ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)

    //POJ3083 //DFS求靠左墙(右墙)走的路径长+BFS求最短路 //Time:0Ms Memory:716K #include<iostream> #include<cst ...

随机推荐

  1. 关于.net MVC5+EF6 网站部署的问题

    创建mvc web application,采用code first 的方式,MVC5,EF6.0 整了一个网站.开发完之后.直接publish.就这样部署到服务器上了. 在使用过程中发现,网站打开的 ...

  2. Android使用Activity用作弹出式对话框

    转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23116115 Android中可用于实现对话框的有Dialog,PopupWin ...

  3. 矩形类定义【C++】

    Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. Inp ...

  4. 使用GDB在远程开发机上调试

    由于一些环境限制,很多学生很可能需要在开发机器上调试.但是,由于对计算机资源的开发限制.在本地的直接机的发展GDB环境配置问题已经成为,其实,我们可以利用这段时间GDB自带gdbserver工具将能够 ...

  5. 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)

    原文:在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据) 我们都知道,在asp.net中修改 ...

  6. [TroubleShooting] The server network address can not be reached or does not exist

    Backtround: I'm trying to set up mirroring between two sql 2008 R2 databases on different servers in ...

  7. 一切从编辑器说起:web前端代码编辑器

    俗话说:工欲善其事,必先利其器. 工欲善其事必先利其器.谓工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 前端写代码也是一样,需要一个好的适合自己的代码编辑器. 我想 ...

  8. 玩转Web之JavaScript(一)-----javaScript语法总结(一) 与鼠标操作有关的语法

    click()  对象.click()  使对象被点击. event.clientX  返回最后一次点击鼠标 X 坐标值: event.clientY  返回最后一次点击鼠标 Y 坐标值: event ...

  9. 小谷的战斗Jquery(三)--水平和垂直菜单

    日薪的例子似乎有点低,今天做多.行,这种实现是一个简单的菜单,Web项目中,有两个共同的菜单:纵向和横向.说到从垂直,看原代码. html代码实现最主要的菜单与子菜单 <span style=& ...

  10. StackExchange.Redis Client

    StackExchange.Redis Client 这期我们来看StackExchange.Redis,这是redis 的.net客户端之一.Redis是一个开源的内存数据存储,可以用来做数据库,缓 ...