#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,現...