Fire Game FZU

来源:互联网 发布:2016天猫双十一数据 编辑:程序博客网 时间:2024/05/29 19:34
#include<iostream>#include<queue>#include<vector>#include<cstring>using namespace std;char maze[11][11];int book[11][11];struct point {    int x,y;    int time;};vector<point>vec;queue<point>que;int go[4][2]={ {1,0},{0,1},{-1,0},{0,-1}};int main(){    int num;    scanf("%d",&num);    for(int k=1;k<=num;k++)    {        int a,b;        int flag=0;        scanf("%d %d",&a,&b);        vec.clear();        int count=0,mintime=999999,cnt=0;        point now;        for(int i=0;i<a;i++)        {            scanf("%s",maze[i]);            for(int j=0;j<b;j++)            {                if(maze[i][j]=='#')                {                    now.y=i;                    now.x=j;                    now.time=0;                    vec.push_back(now);                    count++;                }            }        }        if(count==1)        {            printf("Case %d: 0\n",k);            continue;        }        for(int i=0;i<vec.size();i++)        {            for(int j=i+1;j<vec.size();j++)            {                cnt=0;                memset(book,0,sizeof(book));                que.push(vec[i]);                book[vec[i].y][vec[i].x]=1;                que.push(vec[j]);                book[vec[j].y][vec[j].x]=1;                while(!que.empty())                {                    now=que.front();                    que.pop();                    cnt++;                    if(cnt==count)                    {                        flag=1;                        mintime=min(now.time,mintime);                        break;                    }                    now.time++;                    for(int i=0;i<4;i++)                    {                        point p=now;                        p.x+=go[i][0];                        p.y+=go[i][1];                        if(p.x>=0&&p.y>=0&&p.y<a&&p.x<b&&!book[p.y][p.x]&&maze[p.y][p.x]=='#')                        {                            book[p.y][p.x]=1;                            que.push(p);                        }                    }                }                    while(!que.empty())                    que.pop();            }        }        while(!que.empty())        que.pop();        if(flag)        printf("Case %d: %d\n",k,mintime);        else        printf("Case %d: -1\n",k);    }    return 0;}
0 0
原创粉丝点击