寒假訓練補題 第五天 G7 兩次BFS 困難

2021-09-30 18:15:00 字數 1607 閱讀 2850

喬在迷宮裡工作。不幸的是,迷宮的一部分著火了,迷宮的主人忽略了生火。

逃生計畫。幫助喬逃離迷宮。

考慮到喬在迷宮裡的位置和迷宮的哪個方格著火了,你必須先確定喬是否能離開迷宮

火向他撲來,他能跑多快。

喬和火每分鐘移動乙個正方形,垂直或水平(不是對角)。火向四面八方蔓延

從每個著火的廣場。

喬可以從任何迷宮裡出來迷宮邊緣的正方形。

喬和火都沒有

可以進入乙個被牆佔據的廣場。

輸入輸入的第一行包含乙個整數,即測試數

接下來的案例。每個測試用例的第一行包含兩個

整數r和c,用空格分隔,1≤r,c≤1000。這個

在測試用例的r行之後,每個都包含一行迷宮。每一行都包含

c字元,每個字元都是以下字元之一:

一堵牆•,乙個可通行的廣場

•j,喬在迷宮中的初始位置,這是乙個可以通過的正方形

•f,著火的正方形

每個測試用例中只有乙個j。

輸出對於每個測試用例,如果joe不能在

火到達了他,或者是乙個整數,給了喬最早的時間,幾分鐘內就能安全地離開迷宮。

sample input

24 4

#jf#

#…##…#

3 3#j.

#.fsample output

3impossible

個人心得:這題很難,參照了一下網上的思路:**的地方並不是唯一,火勢可以影響joe的逃跑路線,但joe的逃跑路線不能影響火勢,所以這兩個過程不可能出現在同乙個bfs中

ac**:

#include #include #include #include using namespace std;

struct node

};char maze[1005][1005];

int dis[1005][1005], n, m;

bool vis[1005][1005];

const int inf = 0x3f3f3f3f;

int dx[4] = ;

int dy[4] = ;

void bfs(int sx, int sy)

}else

int x, y, step, ans;

bool fg = false;

while(!q.empty())

for(int i = 0; i < 4; i++)

}else dis[nx][ny] = min(dis[nx][ny], step+1);

tmp.setnode(nx, ny, step+1);

q.push(tmp);}}

if(fg)break;

}if(maze[sx][sy] == 'j')

if(fg)printf("%d\n", ans);

else printf("impossible\n");

}int main()

}getchar();

}memset(dis, inf, sizeof(dis));

bfs(-1, -1);

bfs(jx, jy);

}return 0;

}

寒假第五天

距離回家還有五天 昨天學習了微控制器的課程 一 簡介 微控制器 microcontrollers 是一種 積體電路 晶元,是採用超大規模積體電路技術把具有資料處理能力的 處理器 cpu 隨機儲存器ram 唯讀儲存器rom 多種i o口和 中斷系統 定時器 計數器等功能 可能還包括顯示驅動電路 脈寬調...

訓練營第五天

一 分之語句 1.if 2.switch switch switch特點 break,成立跳出否則繼續 case後的value值型別必須和switch引數型別一致 引數可以是byte short int char string if switch區別 if可以做範圍判斷,也可以等值判斷 switch...

國慶第五天

直接在寢室待了乙個上午 一 matlab 試了一下昨天安裝的matlab2010b發現檔案都打不開,報這個錯 undefined function or method uiopen for input arguments of type char 二 c 1.找到了個之前 裡的乙個問題 把本週開頭和...