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