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;
}
本文来自博客园,作者:斯文~,转载请注明原文链接:https://www.cnblogs.com/zhiweb/p/15483358.html

浙公网安备 33010602011771号