搜尋好題UVA1601

2022-05-13 09:31:04 字數 1035 閱讀 3206

題目

分析:如果以當前3個小寫字母的位置為狀態,則問題轉化為圖上的最短路問題。但是如果每次都判斷小寫字母的下一步是否合法,那就是說每次移動都需要判斷5^3,肯定會超時。可以把所有可以移動的格仔找出來建立一張圖,就是把障礙物給刪除,統計每個可以空格或者有鬼的格仔可以移動到哪些格仔,這樣在判斷的時候就節省了許多時間。然後bfs找最短路。注意讀入的時候要多讀入乙個換行符,因為scanf的緩衝區用完以後,必須要讀入乙個字元才能才能結束讀入,另外就是建圖,過程,這個題的建圖我給滿分。

1 #include "

iostream

"2 #include "

cstdio

"3 #include "

cstring

"4 #include "

string

"5 #include "

queue"6

using

namespace

std;

7const

int maxn=200;8

int s[3],t[3];9

int dx=;

10int dy=;

11int

ind[maxn];

12int g[maxn][5

];13

intd[maxn][maxn][maxn];

14bool conflict(int a,int b,int a2,int

b2)17 typedef struct

18node;

21int

bfs()

2248}49

}50}51

return -1;52

}53intmain()

5471}72

}73for(int i=0;i)80}

81if(n<=2)84

if(n<=1

)87 printf("

%d\n

",bfs());

8889

}90 }

view code

UVa 1601 萬聖節後的早晨

題意 給出w h的網格,相當於迷宮,有大寫字母和小寫字母,算出小寫字母走到大寫字母狀態時的最少步數。思路 建立新圖,然後再bfs。1 include2 include 3 include4 include5 using namespace std 67 const int maxn 16 16 8 ...

BFS特訓 萬聖節後的早晨(UVA1601)

解題思路 直接bfs列舉會存在大量重複的判斷,題目中明示每4個至少有乙個 且圖中空格 部分形成連通塊,故可以將能夠行走的路徑單獨抽離出來。這裡可以利用vector陣列的方式,每個位置連線可以行走的下乙個位置,以此進行遍歷。另一點即是可以將x,y座標轉換成一維的整數,方便查詢。題目描述 小寫字母a,b...

poj3279 (搜尋,好題 )

前題 這題是之前 做鄺斌搜尋專題遺留下的三題之一,最近為了複習搜尋姿勢補上。題意 最大15 15平面 二維陣列 有1有0,對乙個地方操作,與他相鄰四個包括他自己會翻轉 0變1,1變0 求出最少的操作讓全部變成0,輸出操作位置圖。思路 很明顯每個點操作一次就夠了,兩次恢復原樣,然後 我就想不到了.15...