tempsave

#include<bits/stdc++.h>
using namespace std;
# define INF 0x3f3f3f3f
char a[105][105];
int f[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
int visited[105][105];
int n,m;
int FireNum;
struct node
{
    int xi,yi;
    int step;
    node() {}
    node(int xx,int yy,int zz)
    {
        xi=xx;
        yi=yy;
        step=zz;
    }
} q[10001];
bool Judge1(int xi,int yi)
{
    if(xi>=0&&xi<n&&yi>=0&&yi<m&&a[xi][yi]=='#'&&visited[xi][yi]==0)
    {
        return true;
    }
    return false;
}
int  bfs(node q1,node q2)
{
    int depth=0;
    queue<node>q;
    while(!q.empty()) q.pop();
    q.push(q1);
    q.push(q2);
    int g=1;
    while(!q.empty())
    {
        node temp1=q.front();q.pop();

        int x1=temp1.xi;
        int y1=temp1.yi;
        if(visited[x1][y1]==1)continue;
        depth=temp1.step;
        for(int i=0; i<4; i++)
        {
            int x2=x1+f[i][0];
            int y2=y1+f[i][1];
            if(Judge1(x2,y2))
            {
                visited[x2][y2]=1;
                q.push(node(x2,y2,temp1.step+1));
            }
        }
    }
    return depth;
}
bool Judge2()
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            if(a[i][j]=='#'&&visited[i][j]==1)
                return false;
        }
    }
    return true;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        memset(visited,0,sizeof(visited));
        cin>>n>>m;
        int num=1;
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                cin>>a[i][j];
                if(a[i][j]=='#')
                {
                    q[num].xi=i;
                    q[num].yi=j;
                    q[num++].step=0;
                }
            }
        }
        int flag=1;
        int minn=INF;
        int r=INF;
        for(int i=1; i<num; i++)
        {
        for(int j=i; j<num; j++)
        {
                 int temp=min(bfs(q[i],q[j]),r);
                if(Judge2())
                {
                    flag=0;
                    minn=min(minn,temp);
                }
        }
        }
        int s=1;
        cout<<"Case "<<s++<<": ";
        if(flag==0)
            cout<<minn<<endl;
            else
            cout<<-1<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/let_life_stop/article/details/80650452