博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1495 非常可乐(bfs)
阅读量:5307 次
发布时间:2019-06-14

本文共 2546 字,大约阅读时间需要 8 分钟。

题目链接 

题意就不解释了。

总之这很暴力,就6种倒法

(1)s != 0 , s->n;

(2)s != 0 , s->m;

(3)n != 0 , n->s;

(4)n != 0 , n->m;

(5)m != 0 , m->n;

(6)m != 0 , m->s;

bfs一遍就好了。

#include 
#include
#include
#include
#include
#define inf 0X3f3f3f3fusing namespace std;int s , n , m , ans , vis[110][110][110];struct TnT { int x , y , z , step;};int bfs(int xx , int yy , int zz , int step) { memset(vis , 0 , sizeof(vis)); TnT g; g.x = xx , g.y = yy , g.z = zz , g.step = step; queue
q; q.push(g); vis[xx][yy][zz] = 1; while(!q.empty()) { TnT gg = q.front(); int x = gg.x , y = gg.y , z = gg.z; if((x == y && x == s / 2) || (x == z && x == s / 2) || (z == y && z == s / 2)) { return gg.step; } if(x != 0) { if(y != n && !vis[max(0 , x - (n - y))][min(n , y + x)][z]) { TnT gl = gg; gl.x = max(0 , x - (n - y)) , gl.y = min(n , y + x) , gl.z = z , gl.step++;; vis[max(0 , x - (n - y))][min(n , y + x)][z] = 1; q.push(gl); } if(z != m && !vis[max(0 , x - (m - z))][y][min(m , z + x)]) { TnT gl = gg; gl.x = max(0 , x - (m - z)) , gl.y = y , gl.z = min(m , z + x) , gl.step++; vis[max(0 , x - (m - z))][y][min(m , z + x)] = 1; q.push(gl); } } if(y != 0) { if(x != s && !vis[min(s , x + y)][max(0 , y - (s - x))][z]) { TnT gl = gg; gl.x = min(s , x + y) , gl.y = max(0 , y - (s - x)) , gl.z = z , gl.step++;; vis[min(s , x + y)][max(0 , y - (s - x))][z] = 1; q.push(gl); } if(z != m && !vis[x][max(0 , y - (m - z))][min(m , z + y)]) { TnT gl = gg; gl.x = x , gl.y = max(0 , y - (m - z)) , gl.z = min(m , z + y) , gl.step++; vis[x][max(0 , y - (m - z))][min(m , z + y)] = 1; q.push(gl); } } if(z != 0) { if(x != s && !vis[min(s , x + z)][y][max(0 , z - (s - x))]) { TnT gl = gg; gl.x = min(s , x + z) , gl.y = y , gl.z = max(0 , z - (s - x)) , gl.step++; vis[min(s , x + z)][y][max(0 , z - (s - x))] = 1; q.push(gl); } if(y != n && !vis[x][min(n , y + z)][max(0 , z - (n - y))]) { TnT gl = gg; gl.x = x , gl.y = min(n , y + z) , gl.z = max(0 , z - (n - y)) , gl.step++; vis[x][min(n , y + z)][max(0 , z - (n - y))] = 1; q.push(gl); } } q.pop(); } return -1;}int main(){ while(scanf("%d%d%d" , &s , &n , &m) != EOF) { if(s == 0) { break; } if(s % 2 != 0) { printf("NO\n"); continue; } else { int a[3]; memset(vis , 0 , sizeof(vis)); a[0] = s , a[1] = n , a[2] = m; sort(a , a + 3); s = a[2] , n = a[1] , m = a[0]; ans = bfs(s , 0 , 0 , 0); if(ans != -1) printf("%d\n" , ans); else { printf("NO\n"); } } } return 0;}

转载于:https://www.cnblogs.com/TnT2333333/p/6095113.html

你可能感兴趣的文章
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>