您的位置:首页 > 其它

HDU 2612 Find a way

2016-02-25 23:55 302 查看
感觉还是不熟,忙了好久。

#include<stdio.h>
#include<string.h>
int n,m;
char map[205][205];
int a[205][205],b[205][205];
int book[205][205];
int x1,y1,x2,y2;
struct note
{
int x,y;
int s;
}que[100000];
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void bfs(int sx,int sy)
{
int head=1,tail=1;
que[tail].x=sx;
que[tail].y=sy;
tail++;
book[sx][sy]=1;
int flag;
while(head<tail)
{
int tx,ty;
int i,j;
for(i=0;i<4;i++)
{
tx=que[head].x+next[i][0];
ty=que[head].y+next[i][1];
if(tx<0||ty<0||tx>=n||ty>=m||map[tx][ty]=='#'||book[tx][ty])
continue;
que[tail].x=tx;
que[tail].y=ty;
que[tail].s=que[head].s+1;
book[tx][ty]=1;
if(map[tx][ty]=='@')
{
a[tx][ty]+=que[tail].s;
}
tail++;
}
head++;
}
return;
}
void bfs2(int sx,int sy)
{
int head=1,tail=1;
que[tail].x=sx;
que[tail].y=sy;
tail++;
book[sx][sy]=1;
int flag;
while(head<tail)
{
int tx,ty;
int i,j;
for(i=0;i<4;i++)
{
tx=que[head].x+next[i][0];
ty=que[head].y+next[i][1];
if(tx<0||ty<0||tx>=n||ty>=m||map[tx][ty]=='#'||book[tx][ty])
continue;
que[tail].x=tx;
que[tail].y=ty;
que[tail].s=que[head].s+1;
book[tx][ty]=1;
if(map[tx][ty]=='@')
{
b[tx][ty]+=que[tail].s;
}
tail++;
}
head++;
}
return;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,'\0',sizeof(map));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(book,0,sizeof(book));
int i,j;
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
for(j=0;j<m;j++)
{
if(map[i][j]=='Y')
x1=i,y1=j;
if(map[i][j]=='M')
x2=i,y2=j;
}
}
bfs(x1,y1);
memset(que,0,sizeof(que));
memset(book,0,sizeof(book));
bfs2(x2,y2);
int min=999999;
for(i=0;i<=n;i++)
for(j=0;j<m;j++)
if(a[i][j]&&b[i][j]&&(a[i][j]+b[i][j])<min)
min=a[i][j]+b[i][j];
printf("%d\n",min*11);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: