UVA

来源:互联网 发布:贝思外贸软件数据导出 编辑:程序博客网 时间:2024/05/18 02:13

题意:一个人要逃离迷宫,迷宫中有几处起火了。问能否逃出迷宫,能输出最小步数,不能输出"IMPOSSIBLE"。迷宫的边缘都是出口。

思路:BFS,火和人同时进行BFS即可。注意火不止一处。我没开标记数组,而是直接把走过的地方直接标记为‘#’。


#include<bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f;const int MAXN = 1005;int n, m, fire_num, dir[4][2] = {{1,0}, {0, 1}, {-1, 0}, {0,-1}};struct Point{    int x, y, step;    bool op;//people or fire}fire[MAXN], people, NOW, NEXT;char MAP[MAXN][MAXN];int bfs(){    queue<Point> q;    for(int i = 0; i < fire_num; i++) q.push(fire[i]);//火源入队    q.push(people);//人入队    while(!q.empty())    {        NOW = q.front();        q.pop();        if(NOW.op && (NOW.x == 0 || NOW.y == 0 || NOW.x == n - 1 || NOW.y == m - 1)) return NOW.step + 1;        for(int i = 0; i < 4; i++)        {            int X = NOW.x + dir[i][0], Y = NOW.y + dir[i][1];            if(X >= 0 && Y >= 0 && X < n && Y < m && MAP[X][Y] != '#')            {                MAP[X][Y] = '#';                NEXT.x = X; NEXT.y = Y;                NEXT.step = NOW.step + 1; NEXT.op = NOW.op;                q.push(NEXT);            }        }    }    return -1;}int main(){    int T;    scanf("%d", &T);    while (T--)    {        fire_num = 0;        scanf("%d%d", &n, &m);        for (int i = 0; i < n; i++)        {            for(int j = 0; j < m; j++)            {                cin >> MAP[i][j];                if(MAP[i][j] == 'J')                {                    people.x = i; people.y = j;                    people.step = 0; people.op = true;                }                else if(MAP[i][j] == 'F')                {                    fire[fire_num].x = i; fire[fire_num].y = j;                    fire[fire_num].step = 0; fire[fire_num].op = false;                    fire_num++;                }            }        }        int ans = bfs();        if(ans != -1) printf("%d\n",ans);        else printf("IMPOSSIBLE\n");    }    return 0;}/*24 4#####JF##..##..#3 3####J.#.F*/


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿屁多怎么回事 小便多怎么回事女性 白细胞多怎么回事 多一事不如省一事 痰多怎么回事 嗓子痰多怎么回事 鼻涕多怎么回事 睡觉梦多怎么回事 怀孕期间白带多怎么回事 宝宝晚上睡觉出汗多怎么回事 晚上上厕所次数多怎么回事 历史那些事第二季 四季手脚冰凉是怎么回事 秋冬季脸上脱皮是怎么回事 我和老妈那些事1到23季下载 那些年那些兔那些事第一季 事宜 未尽事宜 结婚事宜 事宜是什么意思 咨询法律事宜 未尽事宜的下半句 刑事事宜相互法律协助条例 事实 事实婚姻 事实上英文 事实派 事实论据 事实英文 法律事实 事实上英语 事实英语 事实行为 事实上 事实的英文 事实论证 罔顾事实 事实孤儿 事实拼音 事实图片 与事实