路痴的單身小菡 BFS求最短路徑 DFS求路徑數

2021-08-21 13:30:16 字數 2105 閱讀 5583

小菡很聰明,所以他打acm非常給力,經常偷偷學習到深夜。

他是如此的努力學習,以至於他根本就沒有時間完整的逛過學校。

有一天,他聽說科大湖的黑天鵝非常好看,由於沒有女朋友,他便獨自乙個人去了。

然而他還在專心致志的觀賞黑天鵝,絲毫沒有意識到集訓還有 k 分鐘就要開始了,不幸的是剛好小菡是乙個路痴。

你覺得他在 k 分鐘內可以趕到創客參加集訓嗎?

如果可以,他最少要花多少時間才可以回到創客空間參加集訓呢?這樣子的路徑有多少條?

測試資料第一組為t(1 <= t <= 100),表示測試樣例組數。

對於每組測試樣例:

第一行輸入為三個正整數 n m k(1 <= n,m <= 1000,0 <= k <= 10000),n,m表示地圖的長和寬,k表示最多允許花費在路上的時間(在路上花費的時間剛好為k也合法)。

接下來n行輸入地圖,其中包含有符號『*』、『#』、『l』、'c'。

*:表示可以允許走動的空間。

#:表示障礙物,無法走動的空間。

l:表示科大湖,即小菡的起點,保證有且僅有乙個。

c:表示創客空間,即小菡的終點,保證有且僅有乙個。

小菡走動的計時是從乙個空間到另乙個空間為一分鐘。開始時,小菡已經站在了起點上。當移動時間等於k時剛好到達終點依然視為合法。

(注意:小菡只能往上下左右四個方向走動。)

輸出形式為「case #x: 」(不包含引號),x表示對應第x個樣例。

如果小菡在 k 分鐘內無法回到創客,則輸出-1。

否則,輸出小菡回到創客花費的最短時間,和滿足該最短時間的路徑條數。

4

2 2 3

l**c

4 4 10

l***

****

****

***c

4 4 8

l*##

#***

###*

c***

4 4 10

l*##

#***

###*

c***

case #1: 2 2

case #2: 6 20

case #3: -1

case #4: 9 1

#include#include#includeusing namespace std;

const int maxn = 1005;

char mp[maxn][maxn];

int dis[maxn][maxn];

//初始化距離矩陣,0代表起點,-1代表牆,n代表從起點到這一點的距離(n=1,2,3...n)

int t,n,m,k,cnt;

struct node

};//

void find(int x,int y)

if(dis[x][y] == -1) return;

if(dis[x + 1][y] + 1 == dis[x][y])

find(x + 1,y);

if(dis[x - 1][y] + 1 == dis[x][y])

find(x - 1,y);

if(dis[x][y + 1] + 1 == dis[x][y])

find(x,y + 1);

if(dis[x][y - 1] + 1 == dis[x][y])

find(x,y - 1);

}}void bfs(int x,int y)else}}

}}int main()

int sx,sy,ex,ey;

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

if(mp[i][j] == 'c')}}

bfs(sx,sy);

if(dis[ex][ey] > k || dis[ex][ey] == -1) printf("case #%d: -1\n",case);

else

printf("\n");}*/

find(ex,ey);//從終點向起點搜尋

printf("case #%d: %d %d\n",case,dis[ex][ey],cnt);

}} return 0;

}

最短路 求最長最短路,求最短路的路徑

hdu 1595 find the longest of the shortest include include include include include include include include include include include include include defi...

BFS和順序佇列求最短路徑

資料結構的課程開始也有一段時間了,第一次實驗作業中,有這樣一道題 大意是說給定兩個數軸上的點m,n.限定m的移動方式有3種 左移一步 即mnew m 1 右移一步 即mnew m 1 右跳一步 即mnew m 2 問m最少移動幾次可以到達n 初次看題我沒想到用哪種資料結構,自己學得慢 與老師無瓜.因...

60 BFS的應用 求最短路徑

這幾篇將主要根據我們之前所學的圖的遍歷演算法來解決一些問題,下面我們來看這樣的乙個問題。問題 求不帶權連通圖g中從頂點u到頂點v的一條最短路徑。即求頂點u到頂點v之間邊數最少的頂點序列 圖1 求最短路徑 例如,對於這樣的乙個有向圖,我們要求頂點0到頂點7的最短路徑。對於求最短路徑,我們是選擇dfs還...