hdu1495非常可乐(BFS)
2016-05-13 16:58
239 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495
第一次做这种搜索,看了别人了博客,说是6种状态,没想到BFS还可以这么用。^_^
代码:
第一次做这种搜索,看了别人了博客,说是6种状态,没想到BFS还可以这么用。^_^
代码:
#include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn = 105; int a,b,c; struct node { int a,b,c; int s; }; int v[maxn][maxn][maxn]; void bfs() { memset(v,0,sizeof(v)); queue<node> q; node f,t; f.a = a; f.b = 0; f.c = 0; f.s = 0; q.push(f); while(!q.empty()) { node h = q.front(); q.pop(); if((h.a == a / 2 && h.b == a / 2) ||(h.a == a / 2 && h.c == a / 2) || (h.b == a / 2 && h.c == a / 2)) { printf("%d\n",h.s); return ; } if(h.a) { if(h.a >= b - h.b) { t.a = h.a - (b - h.b); t.b = b; t.c = h.c; t.s = h.s + 1; } else { t.a = 0; t.b = h.a + h.b; t.c = h.c; t.s = h.s + 1; } if(!v[t.a][t.b][t.c]) { q.push(t); v[t.a][t.b][t.c] = 1; } } if(h.a) { if(h.a >= c - h.c) { t.a = h.a - (c - h.c); t.b = h.b; t.c = c; t.s = h.s + 1; } else { t.a = 0; t.b = h.b; t.c = h.c + h.a; t.s = h.s + 1; } if(!v[t.a][t.b][t.c]) { q.push(t); v[t.a][t.b][t.c] = 1; } } if(h.b) { if(h.b >= a - h.a) { t.a = a; t.b = h.b - (a - h.a); t.c = h.c; t.s = h.s + 1; } else { t.a = h.a + h.b; t.b = 0; t.c = h.c; t.s = h.s + 1; } if(!v[t.a][t.b][t.c]) { q.push(t); v[t.a][t.b][t.c] = 1; } } if(h.b) { if(h.b >= c - h.c) { t.a = h.a; t.b = h.b - (c - h.c); t.c = c; t.s = h.s + 1; } else { t.a = h.a; t.b = 0; t.c = h.c + h.b; t.s = h.s + 1; } if(!v[t.a][t.b][t.c]) { q.push(t); v[t.a][t.b][t.c] = 1; } } if(h.c) { if(h.c >= a - h.a) { t.a = a; t.b = h.b; t.c = h.c - (a - h.a); t.s = h.s + 1; } else { t.a = h.a + h.c; t.b = h.b; t.c = 0; t.s = h.s + 1; } if(!v[t.a][t.b][t.c]) { q.push(t); v[t.a][t.b][t.c] = 1; } } if(h.c) { if(h.c >= b - h.b) { t.a = h.a; t.b = b; t.c = h.c - (b - h.b); t.s = h.s + 1; } else { t.a = h.a; t.b = h.b + h.c; t.c = 0; t.s = h.s + 1; } if(!v[t.a][t.b][t.c]) { q.push(t); v[t.a][t.b][t.c] = 1; } } } printf("NO\n"); return ; } int main() { while(~scanf("%d%d%d",&a,&b,&c),a + b + c) { if(a & 1) printf("NO\n"); else bfs(); } }
相关文章推荐
- 机器学习开源代码大集合
- 深度学习BP算法的推导附加RNN-LSTM的推导
- myeclipse中打开java文件中文乱码
- 微信WeixinJSBridge API
- linux tomcat 配置
- 测试用例与软件测试基础
- java并发编程实战-对象的共享
- Problem K
- 表连接 join和(+)、union和uion all
- easyUi --修改
- http-server 超轻量级web服务器
- 阻塞、非阻塞、异步、同步以及select/poll和epoll
- 在线画时序图的工具
- Ubuntu SSH 私匙和公匙的产生原理阐述
- mysql tcp 4层负载
- windows异常处理__try __except
- 72. Edit Distance
- 详解C++各种智能指针: auto_ptr, shared_ptr, weak_ptr, scoped_ptr
- JAVA单元测试Junit
- mysql tcp 4层负载