UVa10603 - Fill
来源:互联网 发布:c语言读取文件内容 编辑:程序博客网 时间:2024/05/13 23:21
分析:取出水量最少的节点进行扩展,这样的程序只需要把队列queue换成优先队列priority_queue,其他部分的代码不变,下面的代码把状态(三元组)和dist合起来定义为一个Node类型,是一种常见的写法,如果要打印路径,需要把访问过的所有节点放在一个nodes数组中,然后在Node中加一个变量fa,表示父节点在nodes数组中的下标,而在队列中只存在节点在nodes数组中的下标而非节点本身,如果内存充足,也可以直接在Node中用一个vector保存路径,省去fa顺着往回找的麻烦。
#include<cstdio>#include<cstring>#include<queue>using namespace std;struct Node{ int v[3], dist; bool operator < (const Node& rhs) const { return dist > rhs.dist; }};const int maxn=205;int vis[maxn][maxn],cap[maxn],ans[maxn];void update_ans(const Node& u){ for(int i=0;i<3;i++){ int d=u.v[i]; if(ans[d]<0||u.dist<ans[d]) ans[d]=u.dist; }}void solve(int a,int b,int c,int d){ cap[0]=a;cap[1]=b;cap[2]=c; memset(vis,0,sizeof(vis)); memset(ans,-1,sizeof(ans)); priority_queue<Node> q; Node start; start.dist=0; start.v[0]=0;start.v[1]=0;start.v[2]=c; q.push(start); vis[0][0]=1; while(!q.empty()){ Node u = q.top(); q.pop(); update_ans(u); if(ans[d] >= 0) break; for(int i=0;i<3;i++) for(int j=0;j<3;j++ ) if(i!=j){ if(u.v[i]==0 || u.v[j]==cap[j]) continue; int amount = min(cap[j],u.v[i]+u.v[j]) - u.v[j]; Node u2; memcpy(&u2, &u, sizeof(u)); u2.dist = u.dist + amount; u2.v[i] -= amount; u2.v[j] += amount; if(!vis[u2.v[0]][u2.v[1]]){ vis[u2.v[0]][u2.v[1]]=1; q.push(u2); } } } while(d >=0) { if(ans[d] >=0 ){ printf("%d %d\n",ans[d],d); return; } d--; }}int main(){ int T,a,b,c,d; scanf("%d",&T); while(T--){ scanf("%d%d%d%d",&a,&b,&c,&d); solve(a,b,c,d); } return 0;}
0 0
- uva10603 - Fill
- uva10603 Fill
- UVa10603 Fill
- UVa10603 - Fill
- UVa10603 - Fill
- uva10603 Fill
- UVA10603 Fill
- Uva10603——Fill
- BFS--状态图--uva10603 Fill
- 【解题报告】UVA10603 Fill BFS
- UVA10603 FILL 优先队列+BFS
- [隐式图搜索]Fill(倒水问题) UVA10603
- Uva10603 Fill 【隐式图bfs(优先队列)】【例题7-8】
- uva10603
- UVa10603
- UVa10603
- UVA10603
- uva10603
- 以后别问这么白痴的问题了 太丢人了
- Android の文字翻转动画的实现
- (十)Linux网络编程--10. 原始套接字
- java word转html(03,07) jacob,openoffcie,poi
- 活到老,学到老
- UVa10603 - Fill
- 一次永久解决cmd窗口汉字显示乱码
- 为什么叫印度阿三
- 获取AndroidManifest.xml中的meta-data数值
- iOS——UIDatePicker的用法
- vector内存释放方法
- Angular的Table们
- sql相关语句
- 不可变String及可变StringBuilder