FZU 2150 Fire Game

Hentai….也是醉了
简单的bfs。。

#include<stdio.h>
#include<string.h>
char map[21][11];
int queue[100100];
int move[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int way[11][11];
int n,m;
int min(int g,int h)
{
    return g>h?h:g;
}
int max(int g,int h)
{
    return g<h?h:g;
}
int bfs(int x1,int y1,int x2,int y2)
{
    int front=0;
    int end=0;
    memset(way,0x3f3f3f3f,sizeof(way));
    queue[end++]=x1;
    queue[end++]=y1;
    queue[end++]=x2;
    queue[end++]=y2;
    way[x1][y1]=0;
    way[x2][y2]=0;
    while(front!=end)
    {
        int oldx=queue[front++];
        int oldy=queue[front++];
        for(int i=0;i<4;i++)
        {
            int newx=oldx+move[i][0];
            int newy=oldy+move[i][1];
            if(newx>=0&&newx<n&&newy>=0&&newy<m)
                if(map[newx][newy]=='#'&&(way[newx][newy]>way[oldx][oldy]+1))
                {
                    way[newx][newy]=way[oldx][oldy]+1;
                    queue[end++]=newx;
                    queue[end++]=newy;
                }
        }
    }
    int max1=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            if(map[i][j]=='#')
            {
                max1=max(max1,way[i][j]);
            }
        }
    return max1;
}
int main()
{
    int T,ii;
    scanf("%d",&T);
    for(ii=1;ii<=T;ii++)
    {
        int ans=0x3f3f3f3f;
        scanf("%d%d",&n,&m);
        int i,j;
        for(i=0;i<n;i++)
            scanf("%s",map[i]);
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
            {
                if(map[i][j]=='#')
                {
                    int i1,j1;
                    for(i1=i;i1<n;i1++)
                        {
                            if(i1==i)
                            {
                                j1==j+1;
                            }//还可以用i+j<=i1+j1判断
                            for(j1=0;j1<m;j1++)
                            {
                                if(map[i1][j1]=='#')
                                {
                                    int test=bfs(i,j,i1,j1);
                                        ans=min(ans,test);
                                }
                            }
                        }
                }
            }
        printf("Case %d: ",ii);
        if(ans==0x3f3f3f3f)
            printf("-1\n");
        else
            printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(bfs,FZU)