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

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage