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/369904

相关文章

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区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1