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

2021-08-28 09:35:01 字數 1317 閱讀 3360

思路:這可真是我目前寫過最長的題目了,雖然很多可以複製(學藝不精t-t)。。。

其實思路還是很簡單的,就是6種情況,各種倒來倒去,然後記錄下路徑,我的方法是用一張圖來表示,有沒有走到過,然後圖上每個位置都存著父節點的位置,以及父節點怎麼達到,如果找到了逆序輸出,如果沒找到impossible,具體的看**吧;

**如下:

#include #include #include #include #include #include #include #include #include #include #include #define esp 1e-4

using namespace std;

int a, b, c;

int ans;

struct node

;node chart[110][110];

bool vis[110][110];

int judge(int x, int y)

void solve(int x, int y, int step)

for (int i =ans - 1; i >= 0; i--)

}void bfs()

q.push(then);

} //倒空2號瓶

if (!vis[q.front().x][0])

q.push(then);

} //倒滿1號瓶

if (!vis[a][q.front().y])

q.push(then);

} //倒滿2號瓶

if (!vis[q.front().x][b])

q.push(then);

} //把1號瓶倒入2號瓶

if (q.front().x + q.front().y <= b)//如果倒的下

q.push(then);}}

else//如果倒不下

q.push(then);}}

//把2號瓶倒入1號瓶

if (q.front().x + q.front().y <= a)//到的下

q.push(then);}}

else

q.push(then);}}

//cout << q.front().fx << q.front().fy << q.front().step << q.front().to << q.front().x << q.front().y << endl;

q.pop(); }}

int main()

} /*

3 5 4

*/ return 0;

}

Poj 3414 Pots(BFS 列印路徑)

題意 給你兩個水杯的容積和乙個數m,讓你在任意乙個水杯中倒出乙個m,求最小步數,和輸出路徑。六種操作。題解 bfs六種操作。然後記錄路徑。用dfs反向查詢路徑。博主的方法比較笨,手寫了乙個佇列,然後記錄當前步是由佇列中那一步到達的。具體看 實現。include include includeusin...

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這個水量。如果不可...