喬在迷宮裡工作。不幸的是,迷宮的一部分著火了,迷宮的主人忽略了生火。
逃生計畫。幫助喬逃離迷宮。
考慮到喬在迷宮裡的位置和迷宮的哪個方格著火了,你必須先確定喬是否能離開迷宮
火向他撲來,他能跑多快。
喬和火每分鐘移動乙個正方形,垂直或水平(不是對角)。火向四面八方蔓延
從每個著火的廣場。
喬可以從任何迷宮裡出來迷宮邊緣的正方形。
喬和火都沒有
可以進入乙個被牆佔據的廣場。
輸入輸入的第一行包含乙個整數,即測試數
接下來的案例。每個測試用例的第一行包含兩個
整數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.找到了個之前 裡的乙個問題 把本週開頭和...