HDU-2612


title: HDU-2612
categories:

  • ACM
  • BFS
    tags:
  • 两次BFS
  • 函数数组形参
    date: 2020-03-02 09:47:16

两个标志数组,两次BFS,不是双BFS,双BFS应该是双入口BFS,是一次BFS,两个入口而已,UVA-11624这才是双入口BFS。二维数组对应的函数形参必须声明第二维,并且不能对传进函数的形参用memset,因为sizeof(数组)不对,这样只能自行指定memset的大小了。

问题

想办法

*时间限制:3000/1000 MS(Java /其他)内存限制:32768/32768 K(Java /其他)
总提交数量:35622接受提交数量:11329
*

问题描述

终于在杭州经过一年的学习,一分飞终于到了宁波。离开宁波一年后,一分飞有很多人见面。特别是好朋友Merceki。
Yifenfei的家在乡下,而Merceki的家在城市中心。因此,易芬菲与Merceki安排了在肯德基会面。宁波有很多肯德基,他们想选择一种让总时间最短的肯德基。
现在给您一张宁波地图,yifenfei和Merceki都可以通过成本11分钟左右上下移动到相邻的道路。

输入值

输入包含多个测试用例。
每个测试用例包括前两个整数n,m。(2 <= n,m <= 200)。
接下来的n行,每行包含m个字符。
“ Y”表示一分钱的初始职位。
“ M”表示Merceki的初始位置。
'#'禁止道路;
‘。’ 路。
'@'KCF

输出量

对于每个测试用例输出,yifenfei和Merceki到达肯德基之一的最短总时间。您可以肯定总是有一个肯德基可以让他们见面。

样本输入

4 4
Y。#@
....
。#..
@ .. M
4 4
Y。#@
....
。#..
@#。M
5 5
Y .. @。
。#...
。#...
@ .. M。
#...#

样本输出

66
88
66

算法

#include<stdio.h>
#include<iostream>
#include<string.h>
#include <queue>
#include<math.h>
using namespace std;
char map[201][201];
int v1[201][201];
int v2[201][201];
int m,n,minn;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
struct Point{
	int x,y;
} a,b,y,M;
void bfs(int x,int y,int v[201][201]){
	memset(v,0,4*201*201);
	a.x=x;a.y=y;
	queue<Point> q;
	q.push(a);
	v[x][y]=1;
	while(!q.empty())
	{
		a=q.front();
		q.pop();
		for(int i=0;i<4;i++)
		{
			b.x=a.x+dir[i][0];
			b.y=a.y+dir[i][1];
			if(b.x>=0&&b.x<m&&b.y>=0&&b.y<n&&map[b.x][b.y]!='#'&&v[b.x][b.y]==0)
			{
				v[b.x][b.y]=v[a.x][a.y]+1;
				q.push(b);
			}
			
		}
	}
}
int main()
{
	//freopen("input.txt", "r", stdin);
	while(cin>>m>>n)
	{
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<n;j++)
			{
				cin>>map[i][j];
				if(map[i][j]=='Y')
				{
					y.x=i;y.y=j;
				}
				if(map[i][j]=='M')
				{
					M.x=i;M.y=j;
				}
			}
		}
		bfs(y.x,y.y,v1);
		bfs(M.x,M.y,v2);
		minn=1000000;
			for(int i=0;i<m;i++)
		{
			for(int j=0;j<n;j++)
			{
				if(map[i][j]=='@'&&v1[i][j]&&v2[i][j])
				{
					v2[i][j]+=v1[i][j]-2;
					if(v2[i][j]<minn)
					{
						minn=v2[i][j];
					}
				}
			}}
		cout<<minn*11<<endl;
	}
    return 0; 
} 
发布了25 篇原创文章 · 获赞 1 · 访问量 486

猜你喜欢

转载自blog.csdn.net/qq_43985303/article/details/104710238