英雄(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區別的是,這裡是借助先進先出的特點,也就是要將前面的先排列出來,不用...