POJ 3414 Pots(倒水問題 列印路徑)

2021-09-26 18:13:26 字數 578 閱讀 8247

分析這道題屬於倒水問題,思想不變,不過在此之上還需要列印路徑,需要在節點當中儲存操作o,還需要記錄每乙個節點的父親。

#include#include#include#include#includeusing namespace std;

const int n = 100 + 10;

int pot[2],c,vis[n][n];

char path[10] = ;

struct node

};node p[n][n];

void print_path(node u)

for(int i = nodes.size() - 1; i >= 0; i--)

}bool bfs()

u2.step += 1;

if(i == 0) u2.o = j;//記錄此次的操作

else u2.o = 3 + j;

if(!vis[u2.v[0]][u2.v[1]])

q.push(u2);}}

} return false;

}int main()

POJ 3414 Pots(廣搜,路徑輸出,經典)

廣搜,參考 題目意思 給出兩個壺的容量a和b,乙個目標水量c,對a b可以有 種操作,求最少經過幾步操作能夠在某個壺中得到目標水量c。輸入a b和c,輸入最少運算元和操作過程。本題要點 1 狀態表示 把a和b壺中水量作為狀態,初始狀態為 0,0 每個操作都是狀態變化的過程。因為有 個壺,所以總共有 ...

poj 3414 倒水問題 bfs

思路 就是bfs,有六種操作,fill 1或2,drop 1或2 將1倒到2,將2倒到1。要注意的是要使用標記陣列vis i j 表示左邊的杯子為i公升,右邊的杯子為j公升,如果已被標記說明之前已經出現這種情況,就不要入隊。從 0,0 開始bfs。因為題目中需要輸出如何倒,那麼就需要儲存路徑。以前似...

搜尋 poj3414倒水問題

題意 給出a,b兩個水杯的容量,和乙個要達到的水量c。總共3種操作,兩個杯子那就是六種。要求通過這六種操作來時兩個杯子其中有乙個水量為c的最少運算元。解題思路 這道題用到的是廣搜bfs,水量 i,j 代表乙個點,通過這六種操作可以變成另乙個點,那麼這兩個點之間就是有路的,每個點有沒有訪問過用鄰接矩陣...