POJ 1606 Jugs(廣搜,路徑輸出)

2021-10-08 16:05:37 字數 1535 閱讀 6601

廣搜,路徑輸出

題目意思:

給出兩個壺的容量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...