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;
}
搞客户端开发的,服务端返回过来得数据信息,要求进行特别处理,最近就碰到过类似情况,虽然查找API 和网络资料,有多种处理方法:但是个人经验认为 一下的方法最简洁、最高效: 首先在项目中引入 包:java.text.DecimalFormat; 然后: DecimalFormat nf = new DecimalFormat("0.00")
BLE抓包分析BLE抓包软件Frontline ComProbe Analysis SystemWireshark合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入BLE抓包软件BLE抓包软件用得比较多的有Frontline ComProb
一、Zemax光学设计超级手册中介绍如下:在zemax序列模型中,所有光线传播发生在特定局部坐标系中的光学面。在非序列模型中,光学元件都用三维物体来模拟(因为有许多光学元件不能在简单的序列表面中被模拟出来,都需要3D物体模拟),且所有物体放置在一个全局坐标系中。
疫情在家使用Mobaxterm远程登录服务器。MobaXterm是一个全功能的终端软件。支持SSH连接,支持FTP、串口等协议。下面是基本使用步骤:单击左上角的”Session”按钮 在弹出框中点击“SSH”选项 在“Remote host”中输入绑定的弹性IP 值 勾选“Specify username”并输入用户名 点击OK,输入password,回车进入控制台如...
js转换页面为图片并下载<div style="background:red;width: 600px;height: 600px;" class="test"> <div id="imgs" style="background:green;"> <div style="background:blue;"> <div style="background:yellow;"> <
1、下载好git以后打开项目所在文件夹 右键 git bash here2、输入$ ssh-keygen -t rsa -C “邮箱地址”3、然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。当然设置密码最好,如果一切顺利的话,可以在用C盘用户目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rs...
在这里,我们完成了基于TensorFlow Lite的应用程序的构建,该应用程序使用来自ONNX Model Zoo的网络模型执行对象识别。输出存储在一组数字数组中。除非我们做更多的工作来解释其中的值,否则数值数组本身不会告诉我们有关检查图像的太多信息。数组的保持值之一如下所示:float[][][][][] buf2 = new float[1][13][13][3][85];让我们解包这个数组。数组的第一个维度是1,用于选择要检查的一组图像中的哪个图像。对于我们的实现,任何时候都只...
第一次写博客,因为据说写博客的都是高手。引用:http://blog.sina.com.cn/s/blog_559f6ffc0101dbem.html正文:__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。注意要加这句话:#progma pack(1) 里面的1表示1字节对齐。例子:qt平台...
Dubbo学习之DubboService 的简介。
package com.xiao.permission_system;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.extension.service.additional.query.impl.Lambd
1.内置方法: __str__ 打印自动触发 __del__ 删除对象之前自动触发2.用于实例化产生类的类称之为元类 __call__ 调用对象时自动触发 __new__ 新建一个空对象 __init__ 调用类自...
Fork/Join框架介绍什么是Fork/Join框架Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结...