最少轉彎問題

2021-09-14 05:04:28 字數 1374 閱讀 7959

題目描述

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

輸入第1行:n m

第2至n+1行:整個地圖地形描述(0:空地;1:高山),

如(圖)第2行地形描述為:1 0 0 0 0 1 0

第3行地形描述為:0 0 1 0 1 0 0

……第n+2行:x1 y1 x2 y2 (分別為起點、終點座標)

輸出s (即最少的拐彎次數)

一、解題思路

一道廣搜題,難點在於需要用到佇列和鍊錶,還有轉彎的x,y座標改變特徵。

(以上兩樣東西我只會模擬)

1、轉彎改變特徵

第一種情況:兩點不在一列(即x座標不同)

if

(e!=queue[a[temp]

].h-queue[temp]

.h)

第二種情況:兩點不在一行(即y座標不同)

if

(f!=queue[a[temp]

].l-queue[temp]

.l)

二、源**

#include

using namespace std;

int ju[

110]

[110];

int n,m;

int x1,x2,y1,y2;

const

int xc[4]

=;const

int yc[4]

=;int sum=0;

int temp;

int e,f;

int a[

10005];

int i,j;

struct jgzb

queue[

10005];

void

bfs(

int x,

int y)

temp=a[temp];}

printf

("%d"

,sum)

; head=tail;

break;}

tail++;}

} head++;}

}int

main()

bfs(x1,y1)

;return0;

}

最少轉彎問題

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

最少轉彎問題

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

最少轉彎問題

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