廣搜,路徑輸出
題目意思:
給出兩個壺的容量a和b, 乙個目標水量c,對a、b可以有3種操作,求最少經過幾步操作能夠在某個壺中得到目標水量c。
輸入a、b和c,輸入最少運算元和操作過程。 題目 和 poj 3414 一樣。
本題要點:
1、狀態表示:
把a和b壺中水量作為狀態,初始狀態為<0,0>,每個操作都是狀態變化的過程。因為有2個壺,所以總共有6種操作。
vis[i][j] 表示第乙個水杯裝i, 第二個水杯裝j 的狀態是否出現過。
2、用廣搜,搜尋可能出現的狀態, 如果 存在某個狀態,a水杯或者b水杯的水量 等於 c,說明存在一定的步驟。否則 impossible。
某種個狀態 node f 的下乙個狀態,可能向 6 種操作發展
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
110;
int a, b, c;
bool vis[maxn]
[maxn]
;//vis[i][j] 表示第乙個水杯裝i, 第二個水杯裝j 的狀態是否出現過
struct node
;string path=
;void
print_res
(char p,
int n)
printf
("success\n");
}void
bfs(
) node v = f;
v.level++
; v.pre++;if
(a > f.a)
// fill a}if
(b > f.b)
// fill b}if
(f.a)
// empty a}if
(f.b)
// empty b}if
(f.a && f.b < b)
// pour a b
elseif(
!vis[v.a]
[v.b])}
if(f.b && f.a < a)
// pour b a
elseif(
!vis[v.a]
[v.b])}
}}intmain()
return0;
}/*3 5 4
5 7 3
*//*
fill b
pour b a
empty a
pour b a
fill b
pour b a
success
fill a
pour a b
fill a
pour a b
empty b
pour a b
success
*/
POJ 3984 迷宮問題 (廣搜,列印路徑)
定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...
POJ 3414 Pots(廣搜,路徑輸出,經典)
廣搜,參考 題目意思 給出兩個壺的容量a和b,乙個目標水量c,對a b可以有 種操作,求最少經過幾步操作能夠在某個壺中得到目標水量c。輸入a b和c,輸入最少運算元和操作過程。本題要點 1 狀態表示 把a和b壺中水量作為狀態,初始狀態為 0,0 每個操作都是狀態變化的過程。因為有 個壺,所以總共有 ...
立體最短路徑,廣搜 POJ2251
參考了一下大神們的解法。也有用深搜的。然而,之前不久看到一句話,最短路徑 bfs。參考 include include include include using namespace std char map 35 35 35 存放地圖 bool hash 35 35 35 這條路是否走過 stru...