I - Problem I (HDU - 2612)

在这里插入图片描述
在这里插入图片描述

AC代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
int a1,b1,a2,b2;
char e[210][210];
int vis[210][210],f1[210][210],f2[210][210];
int ne[8][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct node{
	int x,y,step;
};
void bfs(int x,int y,int a[][210])
{
	int i;
	node st,nt;
	
	queue<node> q;
	st.x=x; st.y=y; st.step=0;
	q.push(st);
	
	while(!q.empty())
	{
		st=q.front(); q.pop();
		for(int i=0;i<4;i++)
		{
			nt.x=st.x+ne[i][0];
			nt.y=st.y+ne[i][1];
			if(nt.x<0 || nt.x>=n || nt.y<0 || nt.y>=m || e[nt.x][nt.y]=='#' || vis[nt.x][nt.y])
				continue;
			nt.step=st.step+1;
			vis[nt.x][nt.y]=1;
			if(e[nt.x][nt.y]=='@')
				a[nt.x][nt.y]=nt.step;
			q.push(nt);
		}
	}	
}
int main()
{
	while(~scanf("%d %d",&n,&m))
	{
		getchar();
		for(int i=0; i<n; i++)
		{
			for(int j=0; j<m; j++)
			{
				scanf("%c",&e[i][j]);
				if(e[i][j]=='Y')
				{
					a1=i; b1=j;
				}
				else if(e[i][j]=='M')
				{
					a2=i; b2=j;
				}
			}
			getchar();
		}
		memset(f1,0,sizeof f1);
		memset(f2,0,sizeof f2);
		memset(vis,0,sizeof vis);
		
		vis[a1][b1]=1;
		bfs(a1,b1,f1);
		memset(vis,0,sizeof vis);
		
		vis[a2][b2]=1;
		bfs(a2,b2,f2);
		
		int mi=0x3f3f3f3f;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f1[i][j] && f2[i][j])
					mi=min(mi,f1[i][j]+f2[i][j]);
			}
		}
		printf("%d\n",mi*11);
	}
	return 0;
}
posted @ 2021-05-15 17:27  斯文~  阅读(21)  评论(0)    收藏  举报

你好!