不同權值的bfs問題

2021-09-03 01:20:08 字數 1494 閱讀 2332

題目鏈結

解題思路:

多權bfs可以用優先佇列優化以保證每一步都佇列中取出的每一步都是最優解,但本題飛機和步行兩種方式,先選飛行再選步行可以保證每步採取最優情況。

首先分析狀態,可開三維vis陣列,vis[x][y][kepp]表示走到(x,y)座標可以繼續續航keep時間所走的步數,由於降落後便可以是空地所以可以貪心飛行。

注意:搜尋起點可能無法起飛,搜尋終點無法降落等各種踩坑問題。

詳解:**注釋

ac**:

#include

using namespace std;

const

int maxn =

200+5;

const

int inf =

0x3f3f3f3f

;struct node

;node

(int xx,

int yy,

int kk):x

(xx),y

(yy)

,keep

(kk);}

;char maze[maxn]

[maxn]

;int dir[4]

[2]=

;int vis[maxn]

[maxn]

[105];

//vis[x][y][kepp]走到(x,y)座標可以繼續續航keep時間所走的步數

int n,m,k,sx,sy,ex,ey;

inline bool judge

(int

&a,int b)

return false;

}void

bfs()}

if(judge

(vis[nx]

[ny][0

],step+2)

)}else

if(maze[cur.x]

[cur.y]

=='#')}

}else

if(maze[cur.x]

[cur.y]

=='x')}

else

if(cur.keep==

0&&maze[nx]

[ny]

!='#')}

}}}int ans = vis[ex]

[ey][0

];//ans初始為vis[ex][ey][0]

//終點可能無法降落,需要提前找地方降落然後走過去

if(maze[ex]

[ey]

=='.')}

printf

("%d\n"

,(ans!=inf)

?ans:-1

);}int

main()

scanf

("%d%d%d%d"

,&sx,

&sy,

&ex,

&ey)

;bfs()

;}return0;

}`

走迷宮問題 邊的權值相同或不同

要求輸出路徑 給定乙個n m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。最初,有乙個人位於左上角 1,1 處,已知該人每次可以向上 下 左 右任意乙個方向移動乙個位置。請問,該人從左上角移動至右下角 n,m 處,至少需要移動多少次。資料保證 1,...

關於css權值的問題

最近迷上html5,看了一些相關學習資料,現在把css中常見易出錯易混淆的知識總結一下 首先說一下關於css樣式繼承,重疊和特殊性 有的時候我們會為同乙個元素設定不同的css樣式 那麼元素會啟用哪乙個css樣式呢?瀏覽器是根據權值來判斷使用哪種樣式的,權值越高,就使用哪種樣式。下面是權值的規則 標籤...

問題 G 區間權值

時間限制 1 sec 記憶體限制 128 mb 提交 112 解決 49 提交 狀態 討論版 命題人 admin 題目描述 小bo有n個正整數a1.an,以及乙個權值序列w1 wn,現在他定義 現在他想知道 你只需要輸出答案對109 7取模後的值 輸入第一行乙個正整數n 第二行n個正整數a1.an ...