涉及考點: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 你只能沿著水平和垂直方向的平地上行進,轉彎次數就等於行進方向的改變 從水平到垂直或從垂直到水平...