poj 3414 搜索BFS
2012-10-31 19:37
337 查看
题意:有A,B两个瓶子,开始是空的,有六种操作,问最少几步能让其中一个瓶子是C的体积;
#include<stdio.h> #include<string.h> struct node { int a; int b; int parent; int level; int op; } pot[10005]; int stk[10005]; int visit[105][105]; void output(int p) { int top=0; stk[0]=p; while(pot[stk[top]].parent!=-1) { top++; stk[top]=pot[stk[top-1]].parent; } for(int i=top; i>=0; i--) { switch(pot[stk[i]].op) { case 0: { printf("DROP(1)\n"); } break; case 1: { printf("FILL(1)\n"); } break; case 2: { printf("DROP(2)\n"); } break; case 3: { printf("FILL(2)\n"); } break; case 4: { printf("POUR(1,2)\n"); } break; case 5: { printf("POUR(2,1)\n"); } break; } } } void bfs(int A,int B,int C) { node cur; pot[0].a=0; pot[0].b=0; pot[0].parent=-1; pot[0].level=0; pot[0].op=-1; int front=0; int rear=1; visit[0][0]=1; int locate=-1,ans; while(front<rear) { cur=pot[front++]; if(cur.a==C||cur.b==C) { ans=cur.level; locate=front-1; break ; } int ta,tb,tp; for(int i=0; i<6; i++) { if(i==0) { ta=0; tb=cur.b; tp=i; } if(i==1) { ta=A; tb=cur.b; tp=i; } if(i==2) { tb=0; ta=cur.a; tp=i; } if(i==3) { tb=B; ta=cur.a; tp=i; } if(i==4) { if((B-cur.b)>=cur.a) { ta=0; tb=cur.a+cur.b; tp=i; } else { ta=cur.a-(B-cur.b); tb=B; tp=i; } } if(i==5) { if((A-cur.a)>=cur.b) { tb=0; ta=cur.a+cur.b; tp=i; } else { ta=A; tb=cur.b-(A-cur.a); tp=i; } } if(visit[ta][tb]==0) { visit[ta][tb]=1; node change; change.a=ta; change.b=tb; change.parent=front-1; change.level=cur.level+1; change.op=tp; pot[rear++]=change; } } } if(locate==-1) { printf("impossible\n"); } else { printf("%d\n",ans); output(locate); } } int main() { int A,B,C; scanf("%d%d%d",&A,&B,&C); memset(visit,0,sizeof(visit)); bfs(A,B,C); return 0; }
相关文章推荐
- H - Pots POJ 3414 算是小白书所讲的一般隐式图搜索, BFS
- POJ 3414 Pots——bfs搜索+dfs输出
- POJ 3414-Pots 简单搜索 BFS
- poj 3414 Pots搜索BFS
- POJ 3414 Pots (BFS搜索题)
- POJ 3414 基础搜索 BFS 六
- POJ - 3414 Pots(15.10.10 搜索专题)bfs
- POJ 3414 Pots (BFS)
- POJ 3414 Pots (BFS) (H)
- poj 1606 Jugs and poj 3414 Pots(数组模拟BFS) uva 571 (数论)
- POJ 3126 Prime Path BFS搜索
- hdu 1241 || poj 1562 Oil Deposits(搜索:BFS水题)
- POJ 3414 bfs求路径(建bfs树然后树上寻找路径)
- Prime Path - POJ 3126 BFS宽度(广度)优先搜索
- POJ 3414 Pots(BFS)
- poj 3414 Pots(BFS)(简单题)
- POJ 3414 Pots(bfs打印路径)
- POJ 3414 Pots (BFS)
- POJ 3414 - Easy BFS - 六入口倒水问题
- POJ 1979 基础搜索 DFS\BFS 一