題目描述
給出一張地圖,這張地圖被分為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 你只能沿著水平和垂直方向的平地上行進,拐彎次數就等於行進方向的改變 從水平到垂直或從垂直到水平...