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里的水. 每一步的操作可以分为六种, 所以编号保存在数组里就行了.
阅读全文
0 0
- POJ 3414.Pots
- Pots POJ
- Pots (POJ
- Pots POJ
- Pots POJ
- Pots POJ
- Pots POJ
- POJ 3414 Pots
- poj 3414 pots
- POJ 3414 Pots
- POJ 3414 Pots BFS
- POJ 3414 Pots
- poj 3414 Pots
- poj 3414 Pots
- POJ 3414 Pots
- poj 3414 Pots
- POJ 3414(Pots)
- POJ 3414 Pots
- Spark学习笔记(相关ha集群搭建+知识总结)
- 授权用户访问数据字典三种方式
- JS对象继承
- npm升级package如何对应的更新package.json中的版本号
- git 远程分支
- POJ 3414.Pots
- Java基础06 组合
- 不忘初心,感动仍在,记陈立杰老师在成都赛区开幕式的讲话
- IE浏览器驱动下载
- 关于大型网站技术演进的思考(二十):网站静态化处理—web前端优化—中(12)
- mac使用expect实现自动登录跳板机
- oracle收集统计信息
- python学习笔记(进阶)
- 获取json中数组的length