FZU2150 Fire Game

来源:互联网 发布:北京赛车pk10辅助软件 编辑:程序博客网 时间:2024/04/30 01:17

AC代码:

#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <queue>#include <vector>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;struct node{    int x,y,t;    //用优先队列一直超时};const int dx[] = {-1,0,1,0},dy[] = {0,-1,0,1};char maze[15][15];int vis[15][15];int n,m;int bfs(node a,node b){    memset(vis,0,sizeof(vis));    queue<node> q;    node cur;    vis[a.x][a.y] = vis[b.x][b.y] = 1;    q.push(a);q.push(b);    int ans = 0;    while(!q.empty()){        cur = q.front();        q.pop();        ans = max(ans,cur.t);        for(int i = 0; i < 4; i++){            int xx = cur.x+dx[i],yy = cur.y+dy[i];            if(xx < 0 || xx >= n || yy < 0 || yy >= m || maze[xx][yy] != '#' || vis[xx][yy])                continue;            vis[xx][yy] = 1;            q.push((node){xx,yy,cur.t+1});        }    }    for(int i = 0; i < n; i++){        for(int j = 0; j < m; j++){            if(maze[i][j] == '#' && !vis[i][j]){                return INF;            }        }    }    return ans;}int main(){    int T,t = 1;    scanf("%d",&T);    while(T--){        vector<node> v;        int cnt = 0;        scanf("%d%d",&n,&m);        for(int i = 0; i < n; i++){            scanf("%s",maze[i]);            for(int j = 0; j < m; j++){                if(maze[i][j] == '#'){                    cnt++;                    v.push_back((node){i,j,0});                }            }        }        printf("Case %d: ",t++);        int ans = INF;        for(int i = 0; i < cnt; i++){            for(int j = i; j < cnt; j++){                ans = min(ans,bfs(v[i],v[j]));            }        }        if(ans == INF)            printf("-1\n");        else            printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击