POJ 3414.Pots

来源:互联网 发布:excel怎么标注重复数据 编辑:程序博客网 时间:2024/06/05 00:14

题目:http://poj.org/problem?id=3414

AC代码(C++):

#include <iostream>#include <algorithm>#include <stdio.h>#include <vector>#include <queue>#include <map>#include <math.h>#include <string>#include <string.h>#include <bitset>#define INF 0xfffffff#define MAXN 100105using namespace std;struct Node{int x;int y;char op[100];};int a,b,c;bool vis[MAXN];void bfs() {queue<Node> q;memset(vis, false, sizeof(vis));Node start;start.x = 0;start.y = 0;memset(start.op,0,sizeof(start.op));vis[0] = true;q.push(start);Node node;Node tmp;while (!q.empty()) {node = q.front();q.pop();if(node.x==c||node.y==c){cout<<strlen(node.op)<<endl;for(int i = 0; node.op[i]!='\0'; i++){if(node.op[i]=='1')cout<<"FILL(1)\n";else if(node.op[i]=='2')cout<<"FILL(2)\n";else if(node.op[i]=='3')cout<<"DROP(1)\n";else if(node.op[i]=='4')cout<<"DROP(2)\n";else if(node.op[i]=='5')cout<<"POUR(1,2)\n";else if(node.op[i]=='6')cout<<"POUR(2,1)\n";}return;}if(!vis[a*1000+node.y]){tmp.x = a;tmp.y = node.y;strcpy(tmp.op,node.op);strcat(tmp.op,"1");q.push(tmp);vis[tmp.x*1000+tmp.y] = true;}if(!vis[node.x*1000+b]){tmp.x = node.x;tmp.y = b;strcpy(tmp.op,node.op);strcat(tmp.op,"2");q.push(tmp);vis[tmp.x*1000+tmp.y] = true;}if(!vis[node.y]){tmp.x = 0;tmp.y = node.y;strcpy(tmp.op,node.op);strcat(tmp.op,"3");q.push(tmp);vis[tmp.x*1000+tmp.y] = true;}if(!vis[node.x*1000]){tmp.x = node.x;tmp.y = 0;strcpy(tmp.op,node.op);strcat(tmp.op,"4");q.push(tmp);vis[tmp.x*1000+tmp.y] = true;}tmp.y = node.x + node.y;if(tmp.y>b){tmp.y = b;tmp.x = node.x + node.y - b;}else tmp.x = 0;if(!vis[tmp.x*1000+tmp.y]){strcpy(tmp.op,node.op);strcat(tmp.op,"5");q.push(tmp);vis[tmp.x*1000+tmp.y] = true;}tmp.x = node.x + node.y;if(tmp.x>a){tmp.x = a;tmp.y = node.x + node.y - a;}else tmp.y = 0;if(!vis[tmp.x*1000+tmp.y]){strcpy(tmp.op,node.op);strcat(tmp.op,"6");q.push(tmp);vis[tmp.x*1000+tmp.y] = true;}}cout<<"impossible";}int main(){cin>>a>>b>>c;bfs();}
总结: 简单的bfs. vis数组可以用一个100100大的一维数组表示, 就是1里的水*1000+2里的水. 每一步的操作可以分为六种, 所以编号保存在数组里就行了.

原创粉丝点击