poj 3414 Pots-bfs

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

参考博客:https://blog.youkuaiyun.com/tigerisland45/article/details/52208174

代码实现:

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<queue>
  4 #include<algorithm>
  5 #include<string>
  6 #include<cstring>
  7 using namespace std;
  8 const int MAXN=100;
  9 int a,b,c;
 10 bool vis[MAXN+1][MAXN+1];
 11 struct node{
 12     int a,b,level;
 13     int plen;
 14     char path[MAXN+1];
 15 };
 16 string path[]={
 17     "FILL(1)","FILL(2)","DROP(1)","DROP(2)",
 18     "POUR(1,2)","POUR(2,1)"
 19 };
 20 void output(int len,char p[],int n)
 21 {
 22     printf("%d\n",len);
 23     for(int i=0;i<n;i++){
 24         cout<<path[(int)p[i]]<<endl;
 25     }
 26 }
 27 void bfs()
 28 {
 29     memset(vis,false,sizeof(vis));
 30     queue<node>q;
 31     node f;
 32     f.a=0; f.b=0; f.level=0;
 33     f.plen=0;
 34     memset(f.path,0,sizeof(f.path));
 35     q.push(f);
 36     vis[f.a][f.b]=true;
 37 
 38     while(!q.empty()){
 39         f=q.front();
 40         q.pop();
 41         if(f.a==c || f.b==c){
 42             output(f.level,f.path,f.plen);
 43             return;
 44         }
 45 
 46         node v;
 47         v=f;
 48         v.level++;
 49         v.plen++;
 50         //FILL(a)
 51         if(a-f.a>0){
 52             v.a=a;
 53             v.b=f.b;
 54             if(!vis[v.a][v.b]){
 55                 v.path[f.plen]=0;
 56                 q.push(v);
 57                 vis[v.a][v.b]=true;
 58             }
 59         }
 60         //FILL(b)
 61         if(b-f.b>0){
 62             v.b=b;
 63             v.a=f.a;
 64             if(!vis[v.a][v.b]){
 65                 v.path[f.plen]=1;
 66                 q.push(v);
 67                 vis[v.a][v.b]=true;
 68             }
 69         }
 70         //DROP(a)
 71         if(f.a){
 72             v.a=0;
 73             v.b=f.b;
 74             if(!vis[v.a][v.b]){
 75                 v.path[f.plen]=2;
 76                 q.push(v);
 77                 vis[v.a][v.b]=true;
 78             }
 79         }
 80         //DROP(a)
 81         if(f.b){
 82             v.b=0;
 83             v.a=f.a;
 84             if(!vis[v.a][v.b]){
 85                 v.path[f.plen]=3;
 86                 q.push(v);
 87                 vis[v.a][v.b]=true;
 88             }
 89         }
 90         //POUR(a,b)
 91         if(f.a && (f.b < b)){
 92             if(f.a > (b-f.b)){
 93                 v.a=f.a-(b-f.b);
 94                 v.b=b;
 95             }else{
 96                 v.a=0;
 97                 v.b=f.b+f.a;
 98             }
 99             if(!vis[v.a][v.b]){
100                 v.path[f.plen]=4;
101                 q.push(v);
102                 vis[v.a][v.b]=true;
103             }
104         }
105         //POUR(b,a)
106         if(f.b && (f.a < a)){
107             if(f.b > (a-f.a)){
108                 v.a=a;
109                 v.b=f.b-(a-f.a);
110             }else{
111                 v.a=f.b+f.a;
112                 v.b=0;
113             }
114             if(!vis[v.a][v.b]){
115                 v.path[f.plen]=5;
116                 q.push(v);
117                 vis[v.a][v.b]=true;
118             }
119         }
120     }
121     cout<<"impossible"<<endl;
122 }
123 int main()
124 {
125     scanf("%d%d%d",&a,&b,&c);
126     bfs();
127     return 0;
128 }

 

转载于:https://www.cnblogs.com/LJHAHA/p/10324931.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值