uva 10603 Fill
来源:互联网 发布:淘宝卖家有什么好软件 编辑:程序博客网 时间:2024/06/04 17:44
竞赛入门经典的隐式图遍历,烧杯倒水,这种题和8数码蛮像的,但是都不是很熟练、、、、而且细节方面实在是做得很不好!想办法改一下粗心的习惯
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxv=200+10;const int maxn=maxv*maxv;int t,d,front,rear;int parent[maxn],dis[maxn],cup[3];int state[maxn][3];int v[maxv][maxv];void init(){ memset(v,0,sizeof(v));}int fill(int b[],int i,int j){ int temp=b[i]+b[j]; if(temp>cup[j]) { int num=cup[j]-b[j]; b[j]=cup[j]; b[i]=temp-b[j]; return num; } else { int num=b[i]; b[i]=0; b[j]=temp; return num; }}int bfs(){ init(); front=0,rear=1; state[0][0]=0,state[0][1]=0,state[0][2]=cup[2]; parent[0]=-1; if(cup[2]==d) return 0; v[0][0]=1; while(front<rear) { int s[3],ns[3]; memcpy(s,state[front],sizeof(s)); for(int i=0;i<3;i++) if(s[i])//have water { for(int j=0;j<3;j++) if(i!=j)//not the same jug { memcpy(ns,s,sizeof(s)); int dist=fill(ns,i,j); //if(dist<0) printf("dist:%d rear:%d\n",dist,rear); //else printf("rear %d\n",rear); int x=ns[0],y=ns[1]; if(!v[x][y]) { v[x][y]=1;//一开始居然连这个都忘了,还debug了半天,我真服了我自己 dis[rear]=dist;//从front到rear倒水的数目 parent[rear]=front; memcpy(state[rear],ns,sizeof(ns)); for(int k=0;k<3;k++) { if(ns[k]==d) { return rear; } } rear++; } } } front++; } return -1;}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&cup[0],&cup[1],&cup[2],&d); int st=bfs(),mindis=maxv; int sum=0; if(st!=-1) { while(st!=-1) { sum+=dis[st]; st=parent[st]; } printf("%d %d\n",sum,d); } else { int x,y; for(int i=0;i<rear;i++) for(int j=0;j<3;j++) if(d>state[i][j]) { if(d-state[i][j]<mindis) { mindis=d-state[i][j]; x=i; y=j; } } for(int i=1;i<=x;i++) sum+=dis[i]; printf("%d %d\n",sum,d-mindis); } } return 0;}
- UVA 10603 Fill
- uva 10603 - Fill
- uva 10603 - Fill
- UVa 10603 - Fill
- uva 10603 - Fill bfs
- uva 10603 Fill
- UVA 10603 - Fill
- UVa 10603 - Fill
- UVa:10603 Fill
- uva 10603 Fill
- UVA 10603 - Fill BFS~
- UVa 10603 - Fill
- UVA 10603-Fill
- uva 10603 Fill
- uva 10603 Fill
- UVa 10603 Fill
- UVa - 10603 - Fill
- UVA 10603 Fill
- DICOM开发工具总结
- 全排列算法原理和实现
- 封装了一些辅助类
- Cocos2d-x学习之创建Android工程和编译
- 【转】博弈论--取物品和Nim游戏
- uva 10603 Fill
- 整站源码测试之一
- web.py文件上传实例
- 5.View学习(Official Tutorials)
- Quantization
- 高效程序员的 7 个共同特征
- Word另存HTML最可靠的方法
- 关于图像特征提取
- Palindrome Partitioning II