紫書uva 10603 優先佇列 bfs

2021-08-19 11:37:52 字數 635 閱讀 1073

這個題目其實是暴力的乙個典範,首先題目說了是最小倒水數,也就是總共次數中轉移水的數量,bfs是找最小次數的,因此要用優先佇列來改變優先順序,將最小倒水數優先,然後是處理如果找不到合適的d,我們要把所有能夠找到的值都存放在乙個陣列裡面,然後遍歷一次就可以了,我用的vis陣列是三維的,用來表示第1,2,3個杯子的水量,和紫書上的略有不同。

#include #include #include #include #include #include /*

296 97 199 62

*/using namespace std;

int c[4];

int d;

int vis[209][209][209];

int cur[209];

struct node

} temp,k;

priority_queue q;

void bfs()

cur[x]=min(cur[x],temp.m);//cur[x]表示第在x的水的時候,最小倒水量

}for(i=0; i<=2; i++) //倒水,當i==j時代表同一杯子}}

for(i=d;i>=0;i--)

}}int main()

}

Fill BFS 優先佇列 UVA10603

uva 10603 include include include using namespace std struct node friend bool operator node a,node b int a,b,c,d int vis 205 205 b杯和c杯的容量表示一種狀態 int re...

UVa 10603 BFS 優先佇列

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

uva 10603 BFS 優先佇列

先吐槽下這兩天無限卡題,已經積了3道了。一籌莫展,只能先開一道稍微簡單點的。題意 這題就是加強版的倒水問題,把三個杯子分別含水量作為狀態,已經倒水的值作為距離。構建隱式圖,然後利用優先佇列寬搜其中記得時刻更新到達終點的最小距離。因為有可能無法到達目標狀態需要輸出離目標最近的。其實狀態還可進一步簡化,...