2 6 3 1 4 1 1 9 3 2 7 1 1
3-1
典型的BFS(广度优先搜索)
每次倒水 有6种情况:
水杯A、B、C
A->B
A -->C
B-->A
B-->C
C-->A
C-->B
按BFS思想构造 求目标的 深度即最少倒水次数
//
// main.cpp
// NYOJ-21 三个水杯
// BFS 广度优先搜索
// Created by [email protected] on 14-7-22.
// Copyright (c) 2014年 Hzw. All rights reserved.
//
#include<iostream>
#include <queue>
#include <vector>
#include "string.h"
#include <algorithm>
using namespace std;
int cupCapacity[3],targetState[3];
class CupState
{
public:
int iState[3];
int iStep;
};
bool operator== ( const CupState &data1, const CupState &data2)
{
if( data1.iState[0]== data2.iState[0]
&& data1.iState[1] == data2.iState[1]
&& data1.iState[2] == data2.iState[2])
return true;
else
return false;
}
vector<CupState> visitBuf;
int pourWater(int sourceId,int targetId,CupState WaterState,queue<CupState> &qCupState)
{
if(WaterState.iState[0] == targetState[0]
&& WaterState.iState[1] == targetState[1]
&& WaterState.iState[2] == targetState[2])
return WaterState.iStep;
if (sourceId == targetId ||
WaterState.iState[sourceId] == 0
|| WaterState.iState[targetId] == cupCapacity[targetId]) {
return -1;
}
if (cupCapacity[targetId] - WaterState.iState[targetId] >= WaterState.iState[sourceId]) {
WaterState.iState[targetId] += WaterState.iState[sourceId];
WaterState.iState[sourceId] = 0;
}
else
{
WaterState.iState[sourceId] -= (cupCapacity[targetId] - WaterState.iState[targetId]);
WaterState.iState[targetId] = cupCapacity[targetId];
}
WaterState.iStep++;
if(WaterState.iState[0] == targetState[0]
&& WaterState.iState[1] == targetState[1]
&& WaterState.iState[2] == targetState[2])
return WaterState.iStep;
if(find(visitBuf.begin(), visitBuf.end(), WaterState) ==visitBuf.end())
{
qCupState.push(WaterState);
visitBuf.push_back(WaterState);
}
return -1;
}
int fBFS()
{
CupState beginState, stateTemp;
memset(&beginState, 0, sizeof(beginState));
memset(&stateTemp, 0, sizeof(stateTemp));
beginState.iState[0] = cupCapacity[0];
queue<CupState> qCupState;
qCupState.push(beginState);
visitBuf.push_back(beginState);
while (!qCupState.empty()) {
CupState data = qCupState.front();
qCupState.pop();
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
int iRet = pourWater(i, j, data,qCupState);
if (iRet != -1) {
return iRet;
}
}
}
return -1;
};
int main()
{
int M;
cin>>M;
while (M--) {
visitBuf.clear();
cin >> cupCapacity[0] >> cupCapacity[1] >> cupCapacity[2];
cin >> targetState[0] >> targetState[1] >> targetState[2];
cout << fBFS() << endl;
}
return 0;
}
本表简单易懂,主要针对打算购买TP的用户本文转自 李晨光 51CTO博客,原文链接:http://blog.51cto.com/chenguang/416590,如需转载请自行联系原作者 ...
案例客户反馈网址响应太慢,有时直接无响应。仿佛卡死一般。驱动包:mysql-connector-java 5.1.32过程看的第一眼,感觉这个问题简单。响应慢,肯定是系统在进行full gc STW导致系统变慢。内存泄漏呗!1、查看java服务的堆栈情况使用阿里arthas工具查看,执行dashboard命令看样子不是在full gc,老年代虽说占用了80%,但是还不足以频繁full gc。2、随后查看tomcat日志tomcat启动增加了-ver..
利用阿里云拉取墙外镜像 K8S很多镜像都是国内无法拉取的,利用阿里的镜像仓库可以很容易拉取这些镜像,我的方式如下:1.创建存放Dockerfile的仓库 很简单,直接创建一个仓库用于存放Dockerfile的仓库,比如我的docker-ali-autobuild,经过不断摸索,建议文件结构采用如下方式(即 image-name -> version -> Dockerfile)比...
C语言 考试座位号 (15分) PTA每个 PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。输入格式:输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字
昨天做了这么多的铺垫,当然就是为了引出今天的DBUtils框架了,它的实现原理跟我们编写的简易框架是类似的。话不多说,进入正题。commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首...
一个完整强大的模块,肯定会有许许多多可以自定义的配置,下面我们来详细讲解模块配置信息的各项参数。我们知道,模块配置信息文件info.php是返回一个数组,里面包含了关于模块的各项信息。参数含义类型必填name模块名string是title模块标题string是identifier模块唯一标识string是icon字体图标string否description模块描述string是author开发者s...
例子一原文:https://www.gnu.org/software/libc/manual/html_node/Argp-Example-1.html#Argp-Example-1argp 最小的例子。当有参数时,给出一条错误消息。当指定选项“-- help”时,打印消息。#include <stdlib.h>#include <argp.h>int...
场景还原一个简单的switch语句Demo#include<stdio.h>int main(){ int a=1, b=2, re; char c; scanf("%c", &c); switch(c) { case '+': re = a + b; break; case '$': re = a - b; r
在小程序中HTML的网页实体无法正常使用,小程序中的写法为: 一、空格,换行&lt;text&gt;你好!\t七月流火啊!\n我在下一行&lt;/text&gt;1\t 空格( 多个只会显示一个空格) \n 换行二、连续空格&lt;view&gt; &lt;text space="ensp"&gt;你好 啊 哈哈哈(空格是中文字符一半大小)&lt;/tex...
最新:斐讯K3千兆无线路由器刷官改版固件的详细图文教程2018年1月31日更新:本教程已经同步增添Phitools 作者最新修改的固件以便支持 K3_V21.6.11.58 版刷机。如果喜欢折腾的话可以刷LEDE固件,刷机方法看:[图文教程] 斐讯K3金/银色版路由器免拆机通用刷机教程此前蓝点网已经发布了借助恩山论坛开发者制作的Telnet开启工具刷诸如LEDE以及梅林固件的详细图文教程。不过此前...
iframe基本内涵通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了。&lt;iframe src="demo_iframe_sandbox.htm"&gt;&lt;/iframe&gt;但是,有追求的我们,并不是想要这么low的iframe. 我们来看看在iframe中还可以设置些什么属性iframe常用属性:1.frameborder:是否...
日萌社人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)spark 入门课程目标:了解spark概念 知道spark的特点(与hadoop对比) 独立实现spark local模式的启动1.1 spark概述 1、什么是spark 基于内存的计算引擎,它的计算速度非常快。但是仅仅只涉及到数据的计算,并没有涉及到数据的存储。 2、为什么要学习spark MapReduce框架局限性.