poj 3414 Pots 广搜(链式存储)

2023-11-08 12:38
文章标签 存储 poj 链式 3414 pots

本文主要是介绍poj 3414 Pots 广搜(链式存储),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.题意:有两个罐子A,B,可以进行三种操作,

  1. FILL(i)        fill the pot i (1 ≤ i ≤ 2) from the tap;//把第i个罐子装满;
  2. DROP(i)      empty the pot i to the drain;//把第i个罐子清空;
  3. POUR(i,j)    pour from pot i to pot j; after this operation either the potj is full (and there may be some water left in the poti), or the poti is empty (and all its contents have been moved to the potj).//把第i个罐子的水倒入第j个罐子里,当且仅当有一个罐子满了或者有一个罐子空了;

编写程序使得经过n次操作后,有一个罐子里剩c升水;

Sample Input

3 5 4

样例三个数分别代表两个罐子的水体积,和最终要剩的体积数!

2.思路:bfs,此题与以前不同在于链式存储,不是构图。

3.代码:

#include<stdio.h>
#include<string.h>
struct node
{int a;int b;int parent;//记录父节点int level;int op;
} pot[1000000];
//int pre[100];
int stk[1000000];
int visit[205][205];
void output(int p)
{int top=0;stk[0]=p;while(pot[stk[top]].parent!=-1){top++;stk[top]=pot[stk[top-1]].parent;}for(int i=top; i>=0; i--){//printf("####%d\n",pot[stk[i]].op);switch(pot[stk[i]].op){case 0:{printf("DROP(1)\n");}break;case 1:{printf("FILL(1)\n");}break;case 2:{printf("DROP(2)\n");}break;case 3:{printf("FILL(2)\n");}break;case 4:{printf("POUR(1,2)\n");}break;case 5:{printf("POUR(2,1)\n");}break;}}
}void bfs(int A,int B,int C)
{node cur;pot[0].a=0;pot[0].b=0;pot[0].parent=-1;pot[0].level=0;pot[0].op=-1;//pre[0]=-1;int front=0;int rear=1;visit[0][0]=1;int locate=-1,ans;while(front<rear){cur=pot[front++];if(cur.a==C||cur.b==C){ans=cur.level;locate=front-1;//printf("locate=%d\n",locate);break ;}int ta,tb,tp;for(int i=0; i<6; i++){if(i==0){ta=0;tb=cur.b;tp=i;}if(i==1){ta=A;tb=cur.b;tp=i;}if(i==2){tb=0;ta=cur.a;tp=i;}if(i==3){tb=B;ta=cur.a;tp=i;}if(i==4){if((B-cur.b)>=cur.a){ta=0;tb=cur.a+cur.b;tp=i;}else{ta=cur.a-(B-cur.b);tb=B;tp=i;}}if(i==5){if((A-cur.a)>=cur.b){tb=0;ta=cur.a+cur.b;tp=i;}else{ta=A;tb=cur.b-(A-cur.a);tp=i;}}if(visit[ta][tb]==0){visit[ta][tb]=1;node change;change.a=ta;change.b=tb;change.parent=front-1;change.level=cur.level+1;change.op=tp;//printf("%d,%d,%d,%d,%d\n",change.a,change.b,change.parent,change.op,change.level);pot[rear++]=change;}}}if(locate==-1){printf("impossible\n");}else{printf("%d\n",ans);output(locate);}
}
int main()
{int A,B,C;scanf("%d%d%d",&A,&B,&C);memset(visit,0,sizeof(visit));bfs(A,B,C);return 0;
}


 

 

这篇关于poj 3414 Pots 广搜(链式存储)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/369903

相关文章

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【