算法设计与分析-分支限界——沐雨先生

(1)抓奶牛问题描述:

农夫约翰被告知逃跑的奶牛的位置,并且要求立即去抓住它。约翰开始的位置在数轴上位置 N ( 0 ≤ N ≤ 100) ,而奶牛的位置在同样一个数轴上的 K (0 ≤ K ≤ 100) 。约翰有两种移动方式:步行和瞬间移动。

  • 步行 : 从任意一点 X 移动到 X+1 或者 X-1 ,花一分钟。
  • 瞬间移动 : 从任意一点 X 移动到 2X ,花一分钟。
    如果奶牛没有意识到被抓捕,也就不会移动,过多久农夫会抓到奶牛?

输入

一行:用空格分开的两个整数: N 和 K

输出

一行 : 农夫抓到奶牛需要的最少分钟数。

例子输入

5 17

例子输出

4(农夫最快的抓捕路径是 5-10-9-18-17, 用时 4 分钟)

建立抓奶牛问题的解题思路

农夫和奶牛的距离是我们判断农夫抓住奶牛的依据,我们是可以很容易得到的,但农夫每一次都有3种选择,X+1,X-1,2X我们都要考虑并把每种情况发生后农夫与奶牛的距离记录下来,在做了这次选择后还没有抓住奶牛的话,再继续考虑下一个3种选择,在这个过程中,我们相当于搜索一颗完全的3叉树,但我们可以剪掉一些枝叶,例如在农夫的位置大于奶牛的位置的时候我们就不可能再去搜索它的下一层的X+1和2X的位置,如果这样就只能越来越远了。在搜索中程序第一次搜索到农夫与奶牛的距离为0时结束,这表示农夫抓住了奶牛。
分枝限界法与解空间树的广度优先遍历算法极为相似。唯一的不同之处是分枝限界法不搜索以不可行结点为根的子树。

程序截图

在这里插入图片描述
在这里插入图片描述

(2)实验题目: 部落卫队问题

原始部落 Byteland 中的居民们为了争夺有限的资源,经常发生冲突。几乎每个居民都有他的仇敌。部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何两个人都不是仇敌。

[ 输入说明 ]

第一行给出居民数 n 和仇敌关系数 m ;下面的 m 行给出每一个仇敌关系,仇敌关系 u 和 v 表示居民 u 和 v 是仇敌。

[ 输出说明 ]

第一行给出部落卫队人数,第二行是卫队组成, 1 代表对应居民在卫队中, 0 代表对应居民不在卫队中

[ 分支限界法分析 ]

把部落的每个人看作是无向图的一个顶点 , 敌对关系看作是无向图的一条边 , 因此 , 该问题可以转化为求一个无向图顶点数最多的独立集 。而分支限界法是基于广度优先的搜索算法,根据广度优先算法的最优性可知,分支限界法一定可以得出一个无向图顶点数最多的独立集。

[ 参考输入、输出、结果 ]

输入 :部落人数: 7

敌对关系数: 10
敌对关系为 : 1 , 2 1,4 2,3 2,4 2,5 2,6 3,5 3,6 4 ,5 5,6

输出 :卫队人数为:3

卫队成员为【1,0,1,0,0,0,1】
在这里插入图片描述
在这里插入图片描述

源程序

(1)

###include<iostream>
#include<queue>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
const int M=100010;int bfs(int s,int t)
{queue<int> q;int head,next;int vis[M],step[M];memset(vis,0,sizeof(vis));memset(step,0,sizeof(step));q.push(s);step[s]=0;while(!q.empty()){head=q.front();q.pop();for(int i=0;i<3;i++){if(i==0)next=head-1;if(i==1)next=head+1;if(i==2)next=head*2;if(next<0||next>M)continue;if(vis[next]==0){vis[next]++;step[next]=step[head]+1;q.push(next);}if(next==t)return step[next];}}
}int main()
{int s,t;			printf("请输入约翰开始的位置在数轴上位置N和奶牛的位置:");while(scanf("%d %d",&s,&t)==2&&s>=0&&t<=M){if(t<=s)//牛在人后面 cout<<abs(s-t)<<endl;else cout<<bfs(s,t)<<endl;}return 0;
}

(2)

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int search(int);
int maxx=0,sum;
int cd[20][20];
bool b[20],g[20];
int pd(int);
int n,c,x,y;
int main() {scanf("%d%d",&n,&c);//输入for(int i=1; i<=c; i++) {scanf("%d%d",&x,&y);cd[x][y]=cd[y][x]=1;//互相是敌人标记1}search(1);//加入第一个人cout<<maxx<<endl;for(i=1; i<=n; i++)cout<<g[i]<<" ";//输出是否加入cout<<endl;return 0;
}
int search(int x) {for(int i=1; i<=n; i++) {if(!b[i]) { //没有加入if(pd(i)) {    //判断已经加入的人中是否有他的仇敌b[i]=1;    //加入队伍,加入的人数加1sum++;}if(x==n) { //全都加完if(sum>maxx)maxx=sum;//找最大值for(int i=1; i<=n; i++)g[i]=b[i];//记录答案} else {search(x+1);//找下一个b[i]=0;//回溯(回溯注意在else里)sum--;}}}return 0;
}
int pd(int x) {for(int i=1; i<=n; i++) {if(b[i]&&cd[x][i])//判断与已经加入的人是否是仇敌return 0;}return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows下同时安装多个版本的JDK并配置环境变量

说明&#xff1a;这里安装的JDK版本为1.8和17 JDK下载 官方地址: https://www.oracle.com/java/ 我这里下载的是exe安装包 安装这里就不阐述了&#xff0c;安装方法都是一样的。 系统环境变量配置 1、首先新建JDK1.8和17的JAVA_HOME&#xff0c;他们的变量名区分开&#xff…

Disruptor概览

版本&#xff1a;3.4.2 使用案例 初始化 Disruptor<T> disruptor new Disruptor<>(T::new, RING_BUFFER_SIZE,(Runnable r) -> new Thread(r, "MY-DISRUPTOR-THREAD"),ProducerType.MULTI,new SleepingWaitStrategy(50, TimeUnit.MICROSECONDS.to…

只看到真人版《武庚纪》的顶级特效?那你亏大了!

“一不留神就看6集”&#xff0c;一看一个不吱声&#xff0c;相信看过《烈焰》&#xff08;原名&#xff1a;武庚纪&#xff09;的观众或多或少都有和笔者一样的感受。 与其他国产剧不同的是&#xff0c;《烈焰》改编自动画《武庚纪》&#xff0c;“漫改”让他的人物装造更贴近…

基于python+vue超市在线销售系统的设计与实现flask-django-php-nodejs

根据此问题&#xff0c;研发一套超市在线销售系统&#xff0c;既能够大大提高信息的检索、变更与维护的工作效率&#xff0c;也能够方便信息系统的管理运用&#xff0c;从而减少信息管理成本&#xff0c;提高效率。 该超市在线销售系统采用B/S架构、并采用python语言以及django…

【Python 滑块不同的操作】对滑块进行处理,列如切割、还原、去除、无脑识别距离等等

文章日期&#xff1a;2024.03.23 使用工具&#xff1a;Python 类型&#xff1a;图片滑块验证的处理&#xff08;不限于识别距离&#xff09; 使用场景&#xff1a;&#xff1f; 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&a…

Python计算机二级选择易错题(三)

选择题第02&#xff0c;03&#xff0c;04套 题目来源&#xff1a;python计算机二级真题&#xff08;选择题&#xff09; - 知乎 选择题第02套 选择题第03套 选择题第04套 time()获取当前时间&#xff0c;即计算机内部时间&#xff0c;浮点数&#xff1b;import time库&#x…

用户多部门切换部门,MySQL根据多个部门id递归获取所有上级(祖级)、获取部门的全路径(全结构名称)

背景 之前做过的项目&#xff0c;都是一个用户就一个部门的&#xff0c;现在碰到个一个用户在多个部门的需求&#xff0c;而且需要可以切换不同部门查看不同数据。 就比如说一个大公司下面有多个子公司&#xff0c;每个子公司有好多部门、子部门等等&#xff0c;然后有部分用…

【赠书第21期】游戏力:竞技游戏设计实战教程

文章目录 前言 1 竞技游戏设计的核心要素 1.1 游戏机制 1.2 角色与技能 1.3 地图与环境 2 竞技游戏设计的策略与方法 2.1 以玩家为中心 2.2 不断迭代与优化 2.3 营造竞技氛围与社区文化 3 实战案例分析 4 结语 5 推荐图书 6 粉丝福利 前言 在数字化时代的浪潮中&…

Rust之构建命令行程序(五):环境变量

开发环境 Windows 11Rust 1.77.0 VS Code 1.87.2 项目工程 这次创建了新的工程minigrep. 使用环境变量 我们将通过添加一个额外的功能来改进minigrep:一个不区分大小写的搜索选项&#xff0c;用户可以通过环境变量打开该选项。我们可以将此功能设置为命令行选项&#xff0c;…

uniapp(vue3) H5页面连接打印机并打印

一、找到对应厂商打印机的驱动并在windows上面安装。查看是否安装完成可以在&#xff1a;控制面板->查看设备和打印机&#xff0c;找到对应打印机驱动是否安装完成 二、打印机USB连接电脑 三、运行代码调用浏览器打印&#xff0c;主要使用的是window.print()功能。下面使用…

前端学习笔记 | Node.js

一、Node.js入门 1、什么是Node.js 定义&#xff1a;是跨平台JS运行环境&#xff08;可以独立执行JS的环境&#xff09;作用&#xff1a; 编写数据接口&#xff0c;提供网页资源功能等等前端工程化&#xff1a;为后续学Vue和React等框架做铺垫 2、Node.js为何能执行JS&#xff…

python分类信息服务平台移动端的设计与实现flask-django-php-nodejs

分类信息服务平台设计的目的是为用户提供活动信息、活动记录等方面的平台。 与PC端应用程序相比&#xff0c;分类信息服务平台的设计主要面向于移动端&#xff0c;旨在为管理员和用户、商铺提供一个分类信息服务平台。用户可以通过Android及时查看活动信息等。 分类信息服务平台…

IDEA调优-四大基础配置-编码纵享丝滑

文章目录 1.JVM虚拟机选项配置2.多线程编译速度3.构建共享堆内存大小4.关闭不必要的插件 1.JVM虚拟机选项配置 -Xms128m -Xmx8192m -XX:ReservedCodeCacheSize1024m -XX:UseG1GC -XX:SoftRefLRUPolicyMSPerMB50 -XX:CICompilerCount2 -XX:HeapDumpOnOutOfMemoryError -XX:-Omi…

pytest之fixture结合conftest.py文件使用+断言实战

pytest之fixture结合conftest.py文件使用 conftest.py--存放固件固件的优先级pytest执行流程pytest之断言实战pytest结合allure-pytest插件生成美观的报告 conftest.py–存放固件 在一个项目的测试中&#xff0c;大多数情况下会有多个类、模块、或者包要使用相同的测试夹具。这…

kafka2.x版本配置SSL进行加密和身份验证

背景&#xff1a;找了一圈资料&#xff0c;都是东讲讲西讲讲&#xff0c;最后我还没搞好&#xff0c;最终决定参考官网说明。 官网指导手册地址&#xff1a;Apache Kafka 需要预备的知识&#xff0c;keytool和openssl 关于keytool的参考&#xff1a;keytool的使用-CSDN博客 …

Pytest测试框架+allure+jenkins自动化持续集成

Pytest是python的一种单元测试框架&#xff0c;可通过pytest 目录路径来运行测试用例 可以通过断言assert来测试是否通过 1.pytest测试用例命名规范 需严格遵循此规范&#xff0c;不然使用 pytest 目录 来运行会找不到该条测试用例。 可通过这样定义main函数&#xf…

Redis入门到实战-第二弹

Redis入门到实战 Redis安装官网地址Redis概述Redis-server安装Redis-stack-server使用(可选)Redisinsight安装(可选)更新计划 Redis安装 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…

LabVIEW焓差试验室流量计现场自动校准系统

LabVIEW焓差试验室流量计现场自动校准系统 在现代工业和科研领域&#xff0c;流量计的准确性对于保证生产过程的质量和效率非常重要。开发了一种基于LabVIEW的焓差试验室流量计现场自动校准系统&#xff0c;通过提高流量计校准的准确性和效率。 在空调器空气焓值法能效测量装…

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节&#xff0c;范围是0到65535.如…

redis功能点

一、redis简介 概述 Redis 是速度非常快的非关系型&#xff08;NoSQL&#xff09;内存键值数据库&#xff0c;可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串&#xff0c;值支持五种数据类型&#xff1a;字符串、列表、集合、散列表、有序集合。 Redis 支持很…