POJ3414解題報告

2021-06-20 15:44:05 字數 797 閱讀 9213

#include#includeconst int maxn = 110;

int vis[maxn][maxn]; //標記狀態是否入隊過

int a,b,c; //容器大小

int step; //最終的步數

int flag; //紀錄是否能夠成功

/* 狀態紀錄 */

struct statusq[maxn*maxn];

int id[maxn*maxn]; //紀錄最終操作在佇列中的編號

int lastindex; //最後乙個的編號

void bfs()

for(int i = 1; i <= 6; i++) //分別遍歷 6 種情況

else if(i == 2) //fill(2)

else if(i == 3) //drop(1)

else if(i == 4) // drop(2);

else if(i == 5) //pour(1,2)

else //如果能夠裝滿 b

}else if(i == 6) // pour(2,1)

else //如果能夠裝滿 b

}next.op = i; //紀錄操作

if(!vis[next.k1][next.k2]) //如果當前狀態沒有入隊過}}

}}int main()

for(int i = 1; i <= step; i++)

}else printf("impossible\n");

}return 0;

}

poj解題報告 3414

題目大意 有二個水壺,對水壺有三種操作,1 fill i 將i水壺的水填滿,2 drop i 將水壺i中的水全部倒掉,3 pour i,j 將水壺i中的水倒到水壺j中,若水壺 j 滿了,則 i 剩下的就不倒了,問進行多少步操作,並且怎麼操作,輸出操作的步驟,兩個水壺中的水可以達到c這個水量。如果不可...

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 代表乙個點,通過這六種操作可以變成另乙個點,那麼這兩個點之間就是有路的,每個點有沒有訪問過用鄰接矩陣...