最小轉彎問題(bfs)

2021-10-01 07:43:17 字數 930 閱讀 9908

涉及考點:bfs(寬度優先搜尋算)

題目描述:給出一張地圖,這張地圖被分為 n×m(n,m<=100)個方塊,任何乙個方塊不是平地就是高山。平地可以通過,高山則不能。現在你處在地圖的(x1,y1)這塊平地,問:你至少需要拐幾個彎才能到達目的地(x2,y2)?你只能沿著水平和垂直方向的平地上行進,拐彎次數就等於行進方向的改變(從水平到垂直或從垂直到水平)的次數。例如:如圖 1,最少的拐彎次數為5。

分析:由題意得,這道題可以用bfs,最優化問題

本題唯一要注意的是要讓拐彎代價相同。

我們可以用乙個while迴圈來實現一直走到底在拐彎數加1!!

#include

#include

using

namespace std;

const

int dx=

;const

int dy=

;int m,n,a[31]

[31],sx,sy,lx,ly,f[

1010][

4];void

bfs(

) tail++

; a[nx]

[ny]=1

; f[tail][1

]=nx;

f[tail][2

]=ny;

f[tail][3

]=f[head][3

]+1;

//實現代價相同

nx=nx+dx[i]

; ny=ny+dy[i];}

}}while

(head

intmain()

BFS 最小轉彎問題

description 給出一張地圖,這張地圖被分為 n m n,m 100 個方塊,任何乙個方塊不是平地就是高山。平地可以通過,高山則不能。現在你處在地圖的 x1,y1 這塊平地,問 你至少需要拐幾個彎才能到達目的地 x2,y2 你只能沿著水平和垂直方向的平地上行進,拐彎次數就等於行進方向的改變 ...

SSL P2325 最小轉彎問題

給出一張地圖,這張地圖被分為 n m n,m 100 個方塊,任何乙個方塊不是平地就是高山。平地可以通過,高山則不能。現在你處在地圖的 x1,y1 這塊平地,問 你至少需要拐幾個彎才能到達目的地 x2,y2 你只能沿著水平和垂直方向的平地上行進,拐彎次數就等於行進方向的改變 從水平到垂直或從垂直到水...

最少轉彎問題

給出一張地圖,這張地圖被分為n m n,m 100 個方塊,任何乙個方塊不是平地就是高山。平地可以通過,高山則不能。現在你處在地圖的 x1,y1 這塊平地,問 你至少需要轉幾個彎才能到達目的地 x2,y2 你只能沿著水平和垂直方向的平地上行進,轉彎次數就等於行進方向的改變 從水平到垂直或從垂直到水平...