廣搜, 參考
題目意思:
給出兩個壺的容量a和b, 乙個目標水量c,對a、b可以有3種操作,求最少經過幾步操作能夠在某個壺中得到目標水量c。
輸入a、b和c,輸入最少運算元和操作過程。
本題要點:
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
(int cnt,
char p,
int 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)
//drop(a)}if
(f.b)
//drop(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])}
}printf
("impossible\n");
}int
main()
/*3 5 4
*//*
6fill(2)
pour(2,1)
drop(1)
pour(2,1)
fill(2)
pour(2,1)
*/
POJ 3414 Pots(倒水問題 列印路徑)
分析這道題屬於倒水問題,思想不變,不過在此之上還需要列印路徑,需要在節點當中儲存操作o,還需要記錄每乙個節點的父親。include include include include includeusing namespace std const int n 100 10 int pot 2 c,vi...
POJ 1606 Jugs(廣搜,路徑輸出)
廣搜,路徑輸出 題目意思 給出兩個壺的容量a和b,乙個目標水量c,對a b可以有 種操作,求最少經過幾步操作能夠在某個壺中得到目標水量c。輸入a b和c,輸入最少運算元和操作過程。題目 和 poj 3414 一樣。本題要點 1 狀態表示 把a和b壺中水量作為狀態,初始狀態為 0,0 每個操作都是狀態...
POJ 3984 迷宮問題 (廣搜,列印路徑)
定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...