Poj 3414 Pots(BFS 列印路徑)

2021-08-14 19:13:55 字數 1356 閱讀 3991

題意:給你兩個水杯的容積和乙個數m,讓你在任意乙個水杯中倒出乙個m,求最小步數,和輸出路徑。六種操作。

題解:bfs六種操作。然後記錄路徑。用dfs反向查詢路徑。博主的方法比較笨,手寫了乙個佇列,然後記錄當前步是由佇列中那一步到達的。具體看**實現。

#include#include#includeusing namespace std;

struct node que[100000];

int book[105][105]; // 標記陣列

int head,tail; //隊頭和隊尾

int result[100000]; // 結果陣列。

int ans = 0; // 結果陣列的下標

void print(int s)

else

}int a,b,c;

void bfs()

else if(result[i] == 2)

else if(result[i] == 3)

else if(result[i] == 4)

else if(result[i] == 5)

else if(result[i] == 6)

}if(now.prezt == 1)

else if(now.prezt == 2)

else if(now.prezt == 3)

else if(now.prezt == 4)

else if(now.prezt == 5)

else if(now.prezt == 6)

return ;

} for(int i = 1 ; i <= 6 ; i++)

}else if(i == 2)

}else if(i == 3)

else if(sum >b)

next.step = now.step + 1;

next.pre = aa;

next.prezt = 3;

if(book[next.x][next.y] == 0)

}else if(i == 4)

}else if(i == 5)

}else if(i == 6)

else

next.step = now.step + 1;

next.pre = aa;

next.prezt = 6;

if(book[next.x][next.y] == 0)

}} }

printf("impossible\n");

return ;

}int main()

return 0;

}

poj 3414 pots(bfs暴力 路徑記錄)

思路 這可真是我目前寫過最長的題目了,雖然很多可以複製 學藝不精t t 其實思路還是很簡單的,就是6種情況,各種倒來倒去,然後記錄下路徑,我的方法是用一張圖來表示,有沒有走到過,然後圖上每個位置都存著父節點的位置,以及父節點怎麼達到,如果找到了逆序輸出,如果沒找到impossible,具體的看 吧 ...

POJ 3414 Pots BFS記錄最短路徑

poj3414 給出了兩個瓶子1號和2號的容量分別為a和b,以及乙個目標水量c,對兩個瓶子有如下操作 fill i 把i號瓶子裝滿 drop i 把i號瓶子倒光 pour i,j 把i號瓶子的水倒入j號瓶子,直到i號瓶子水倒光或者j號瓶子被倒滿 問至少經過幾次操作使任一瓶子的水量為c,並記錄任一條最...

poj解題報告 3414

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