UVa10603 Fill 優先佇列搜尋

2021-07-30 07:30:14 字數 801 閱讀 4786

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 207;

bool vis[maxn][maxn];//實際上兩個杯子的狀態就可以確定整個三元組的狀態

int path[maxn][maxn][2];//同於儲存路徑,儲存的是指向他的上乙個座標

typedef

struct node

//通過過載小於號為大於號實現小根堆

}node;

int ans[4] = ;

int a, b, c;

void printfun(int x, int y)

int main()

else

fn.state[2] = c;

q.push(fn);

vis[0][0] = 1;

while (!q.empty())

}if (ans[0] == d)

break;

for (int i = 0; i<3; i++)}}

}}

cout

<< ans[0] << " "

<< ans[1] << endl;

printfun(ans[2], ans[3]);

}return

0;}

//通過優先佇列,每一次到達這個狀態都是該狀態優先值最小情況下的路徑,bfs只是將這裡的優先值換位步數

uva 10603 Fill(倒水問題 BFS)

貌似uva崩了,現在進不去,所以這道題還判斷正確與否,其實無所謂了,我這是看的網上的 寫的基本上一樣,唉,沒辦法,不會做,又看了網上的題解,認真寫理解吧還是。構造了乙個結構體,water陣列用來儲存三個杯子的狀態,sum用來儲存當前的倒水量,visit陣列用來儲存狀態,以 防他們重複訪問,三個杯子只...

例題7 8 UVA 10603 Fill 倒水問題

2017.1.24 重新做了一遍這個題目。三個杯子,總水量是一樣的,只需要記錄前兩個杯子來作為狀態來判重即可。然後他要求總到水量最小,直接貪心就好了,優先選取總水量最小的,用優先佇列即可。然後找乙個最接近d的答案即可。include include include include using nam...

UVa 10603 BFS 優先佇列

題目鏈結 解題報告 lrj紫書中路徑尋找問題的例題。大部分細節書中都有說明,不再贅述。說一點自己的感想。書裡面說演算法的正確性不是顯然的,可是我覺得應該是顯然的吧?每次找到佇列裡dist值最小的狀態,以它來更新ans值,並且拓展其他狀態。假如當前我們找到了乙個恰好有某個瓶子裡的水為d公升的狀態p,現...