Fire Game FZU - 2150

    xiaoxiao2021-03-25  114

    #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; }
    转载请注明原文地址: https://ju.6miu.com/read-8004.html

    最新回复(0)