南阳理工OJ_题目21 三个水杯
来源:互联网 发布:等到烟火清凉 知乎 编辑:程序博客网 时间:2024/04/30 03:53
//bfs#include <iostream>#include <cstring>#include <queue>using namespace std;int bfs();struct data{ int v1; int v2; int v3; int d;};int v1, v2, v3;int x, y ,z;char vis[101][101][101];int main(){ int T; cin >> T; while(T--) { cin >> v1 >> v2 >> v3; cin >> x >> y >> z; memset(vis, 0, sizeof(vis)); cout << bfs() << '\n'; }}int bfs(){ queue<data> q; data t; data a; t.v1 = v1; t.v2 = 0; t.v3 = 0; t.d = 0; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; vis[t.v1][t.v2][t.v3] = 1; q.push(t); while(!q.empty()) { a = q.front(); q.pop(); if(a.v1 != 0 && a.v2 != v2) //v1 -> v2 { if(a.v1 >= (v2-a.v2)) { t.v1 = a.v1 - (v2-a.v2); t.v2 = v2; t.v3 = a.v3; } else { t.v1 = 0; t.v2 = a.v2 + a.v1; t.v3 = a.v3; } t.d = a.d + 1; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; if(vis[t.v1][t.v2][t.v3] == 0) { q.push(t); vis[t.v1][t.v2][t.v3] = 1; } } if(a.v1 != 0 && a.v3 != v3) //v1 -> v3 { if(a.v1 >= (v3-a.v3)) { t.v1 = a.v1 - (v3-a.v3); t.v2 = a.v2; t.v3 = v3; } else { t.v1 = 0; t.v2 = a.v2; t.v3 = a.v3 + a.v1; } t.d = a.d + 1; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; if(vis[t.v1][t.v2][t.v3] == 0) { q.push(t); vis[t.v1][t.v2][t.v3] = 1; } } if(a.v2 != 0 && a.v1 != v1) //v2 -> v1 { if(a.v2 >= (v1-a.v1)) { t.v1 = v1; t.v2 = a.v2 - (v1-a.v1); t.v3 = a.v3; } else { t.v1 = a.v1 + a.v2; t.v2 = 0; t.v3 = a.v3; } t.d = a.d + 1; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; if(vis[t.v1][t.v2][t.v3] == 0) { q.push(t); vis[t.v1][t.v2][t.v3] = 1; } } if(a.v2 != 0 && a.v3 != v3) //v2 -> v3 { if(a.v2 >= (v3-a.v3)) { t.v1 = a.v1; t.v3 = v3; t.v2 = a.v2 - (v3-a.v3); } else { t.v1 = a.v1; t.v3 = a.v3 + a.v2; t.v2 = 0; } t.d = a.d + 1; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; if(vis[t.v1][t.v2][t.v3] == 0) { q.push(t); vis[t.v1][t.v2][t.v3] = 1; } } if(a.v3 != 0 && a.v1 != v1) //v3 -> v1 { if(a.v3 >= (v1-a.v1)) { t.v1 = v1; t.v2 = a.v2; t.v3 = a.v3 - (v1-a.v1); } else { t.v1 = a.v1 + a.v3; t.v2 = a.v2; t.v3 = 0; } t.d = a.d + 1; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; if(vis[t.v1][t.v2][t.v3] == 0) { q.push(t); vis[t.v1][t.v2][t.v3] = 1; } } if(a.v3 != 0 && a.v2 != v2) //v3 -> v2 { if(a.v3 >= (v2-a.v2)) { t.v1 = a.v1; t.v2 = v2; t.v3 = a.v3 - (v2-a.v2); } else { t.v1 = a.v1; t.v2 = a.v2 + a.v3; t.v3 = 0; } t.d = a.d + 1; if(t.v1 == x && t.v2 == y && t.v3 == z) return t.d; if(vis[t.v1][t.v2][t.v3] == 0) { q.push(t); vis[t.v1][t.v2][t.v3] = 1; } } } return -1;}
0 0
- 南阳理工OJ_题目21 三个水杯
- 南阳理工ACM 21 三个水杯
- 南阳理工ACM 题目21 三个水杯 java代码 广度优先
- 南阳oj 题目21 三个水杯
- 南阳理工--21--三个水杯~~广度优先搜索
- 南阳理工OJ_三个数从小到大排序
- 南阳 21 三个水杯
- 南阳理工OJ_题目709 异形卵
- 南阳理工OJ_题目714 Card Trick
- 南阳理工OJ_题目16 矩形嵌套
- 南阳理工OJ_题目168 房间安排
- 南阳理工OJ_题目303 序号互换
- 南阳理工OJ_题目305 表达式求值
- 南阳理工OJ_题目308 Substring
- 南阳理工OJ_题目915 +-字符串
- 南阳理工OJ_题目18 The Triangle
- 南阳理工OJ_题目10 skiing
- 南阳理工OJ_题目995 硬币找零
- MyEclipse中DB Browser连接SQL Server2012
- 01背包
- 算法——基础篇——FJ的字符串
- 使用TIBCO构建Web Service
- PAT A 1042. Shuffling Machine (20)
- 南阳理工OJ_题目21 三个水杯
- Tiny语言运行环境TM机源代码
- win32 22字符串资源,版本信息资源,二进制和自定义资源
- xml的生成和解析
- short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
- 点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法
- Tibco soap wsdl embed 例子
- 读书笔记:计算机网络4章:网络层
- C++中的set