題目 英雄 BFS

2021-06-26 16:28:44 字數 1706 閱讀 5310

英雄(hero.cpp/pas)

題目描述(description):

城堡迷宮由n× m個格仔組成,英雄mario瑪麗奧要在城堡迷宮中從起始點移動

點去拯救被怪物擄去的公主,他每一步只能從當前所在的格仔移動到相鄰的4個格仔

而且不能移出城堡的範圍,走一步需要1秒的時間。

城堡中某些格仔裡面有彈簧,每個彈簧具有特定的能量k,不同彈簧的k值不一

。如果mario跳到乙個有彈簧的格仔,他就會繼續向前跳k個格仔或者被牆所阻擋無

向前,這個時間忽略不計。

請你計算mario從起始點到達目標點(公主位置)需要的最短時間,如果不能到

出「 impossible」。

輸入檔案(hero.in):

第一行,兩個整數, n和m( 3<=n,m<=100),分別表示城堡的行和列。

第二行,乙個非負整數k,表示彈簧的數量。接下來k行,每行含3個正整數—

x, y, p。其中x, y是彈簧的座標( 2<=x<=n-1, 2<=y<=m-1 ), p是該彈簧的能

接下來最後兩行,第一行是mario的座標,第二行是公主的座標。

注意:輸入檔案保證沒有乙個彈簧是挨著城堡圍牆的。

輸出檔案(hero.out):

輸出mario從初始位置到達公主所在位置需要的最短時間(秒)。

如果不能到達,則輸出「 impossible」。(引號不需輸出)

樣例(sample):

sample input case 1:

10 10

127 5

2 81 1

sample output case 1:3

/思路:

裸bfs 還猶豫什麼!!!

只是要注意,mario可以從乙個彈簧跳到另乙個彈簧。

還有 無解的情況只可能是幾個彈簧把公主(目標)包圍住了,有意的話可以特判一下優化時間,資料範圍就那一點兒,我就沒做。

好叻,上**。

#include#include#include#include#include#includeusing namespace std;

int n,m,k;

int ex,ey;

int map[100+10][100+10];

int hash[100+10][100+10];

int dx[4]=;

int dy[4]=;

struct code

start;

queueq;

void read()

scanf("%d%d",&x,&y);

start.x=x;

start.y=y;

start.step=0;

hash[x][y]=1;

q.push(start);

scanf("%d%d",&ex,&ey);

}code expend(code u,int i)

return u;

}bool check(code v)

return hash[v.x][v.y]=true;

}void work()

} }printf("impossible\n");

}int main()

/

BFS題目集合

有時間要去做做這些題目,所以從他人空間copy過來了,謝謝那位大蝦啦。解法 bfs,要注意的是如何判斷圖形是一樣的,我的做法就是計算每兩個點的距離之和。看 解法 dfs 簡單題目。pku 1077 eight 解法 廣搜,雙向光搜,a ida 其中 a 時間最好,雙向的廣搜也ok ida 時間500...

NY 題目58 最少步數 BFS

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,...

借助leetcode題目來了解BFS和DFS

對於樹而言,就是一種層層遍歷的感覺,在實現的過程中,常常借助的是輔助佇列來實現,也就是借助先進先出的特性來實現的。下圖來看。用bfs的話,就是3 9 20 15 7的結果。整體實現來說,就是遍歷root再來遍歷左右子樹,不過與dfs區別的是,這裡是借助先進先出的特點,也就是要將前面的先排列出來,不用...