某农业学校 算法设计与分析-第五次实验-回溯算法

news/2024/5/6 11:27:41/文章来源:https://blog.csdn.net/qssssss79/article/details/128434016

1. 罗密欧与朱丽叶的迷宫问题

问题描述

罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗密欧位于迷宫的(p,q)方格中,他必须找出一条通向朱丽叶所在的(r,s)方格的路。在抵达朱丽叶之前,他必须走遍所有未封闭的房间各一次,而且要使到达朱丽叶的转弯次数为最少。每改变一次前进方向算作转弯一次。请设计一个算法帮助罗密欧找出这样一条道路。

编程任务:

对于给定的罗密欧与朱丽叶的迷宫,编程计算罗密欧通向朱丽叶的所有最少转弯道路。

数据输入:

输入第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2 行,每行也有2 个正整数,分别表示罗密欧所处的方格(p,q)和朱丽叶所处的方格(r,s)。

结果输出:

输出计算出的罗密欧通向朱丽叶的最少转弯次数和有多少条不同的最少转弯道路。输出的第1行是最少转弯次数。输出的第2行是不同的最少转弯道路数。接下来的n行每行m个数,表示迷宫的一条最少转弯道路。A[i][j]=k表示第k步到达方格(i,j);A[i][j]=-1 表示方格(i,j)是封闭的。

如果罗密欧无法通向朱丽叶则输出“No Solution!”。

输入示例

3 4 2

1 2

3 4

1 1

2 2

输出示例

6

7

1 -1 9 8

2 10 6 7

3 4 5 -1

#include<bits/stdc++.h>
using namespace std;
/*
3 4 2
1 2
3 4
1 1
2 2
*/
int m,n,k;
int p,q,r,s;
int ans[1010][1010],a[1010][1010];
int dx[8]={0,1,1,1,0,-1,-1,-1},dy[8]={1,1,0,-1,-1,-1,0,1};
int minas=1e8+10,flag=0,anslu=0;
//最少转弯次数,判断是否有答案,最少转弯次数的数量 void dfs(int x,int y,int num,int turn,int dir)
{if(x==r && y==s && turn<=minas && num==n*m-k){if(turn<minas){minas=turn;anslu=1; flag=1;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){ans[i][j]=a[i][j];}}}else{anslu++;}return ;}for(int i=0;i<8;i++){int xx=x+dx[i],yy=y+dy[i];if(xx<1 || xx>m || yy<1 || yy>n) continue;if(a[xx][yy]!=0) continue;a[xx][yy]=num+1;if(dir!=i) {if(turn+1<=minas){dfs(xx,yy,num+1,turn+1,i);}}else//相同方向 {dfs(xx,yy,num+1,turn,i);	}a[xx][yy]=0;}
}int main()
{cin>>m>>n>>k;for(int i=1;i<=k;i++){int x,y;cin>>x>>y;a[x][y]=-1;}cin>>p>>q>>r>>s;a[p][q]=1;dfs(p,q,1,-1,8);if(flag==1){cout<<minas<<endl<<anslu<<endl;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cout << ans[i][j]<<" ";}cout << endl;}}else{cout << "No Solution!\n";}return 0;
}

 

2. n色方柱问题

问题描述

设有 n 个立方体,每个立方体的每一面用红、黄、蓝、绿等 n 种颜色之一染色。要把这n 个立方体叠成一个方形柱体,使得柱体的 4 个侧面的每一侧均有 n 种不同的颜色。试设计一个回溯算法,计算出 n 个立方体的一种满足要求的叠置方案。

对于给定的 n 个立方体以及每个立方体各面的颜色,计算出 n 个立方体的一种叠置方案,使得柱体的 4 个侧面的每一侧均有 n 种不同的颜色。

数据输入:

第一行有 1 个正整数 n,0< n< 27,表示给定的立方体个 数和颜色数均为 n。第 2 行是 n 个大写英文字母组成的字符串。该字符串的第 k(0≤ k< n) 个字符代表第 k 种颜色。接下来的 n 行中,每行有 6 个数,表示立方体各面的颜色。立方体各面的编号如下图所示。

图中 F 表示前面,B 表示背面,L 表示左面,R 表示右面,T 表示顶面,D 表示底面。相应地,2 表示前面,3 表示背面,0 表示左面,1 表示右面,5 表示顶面,4 表示底面。

结果输出:

输出n个立方体的一种可行的叠置方案。每行 6 个字符,表示立方体个面的颜色。如果不存在所要求的叠置方案,输出 “No Solution”

输入示例:

RGBY 

0 2 1 3 0 0 

3 0 2 1 0 1 

2 1 0 2 1 3 

1 3 3 0 2 2

输出示例:

RBGYRR 

YRBGRG 

BGRBGY 

GYYRBB

 

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
char t[1010];int main()
{cin>>n;cin>>s;for(int i=1;i<=n;i++){for(int j=1;j<=6;j++){int k;cin>>k;cout << s[k];}cout << endl;}return 0;
}

3. 最佳调度问题

问题描述:

假设有 n 个任务由 k 个可并行工作的机器来完成。完成任务 i 需要时间为ti ,设计完成这 n 个任务的最佳调度算法,使得完成全部任务的时间最早。

编程任务:

对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1,2,…,n。编程计算完成这n个任务的最佳调度。

输入样例:(第一行为任务数n,第二行为可并行工作的机器数k,第三行为机器完成任务i所需的单位时间)

10

7

67 45 80 32 59 95 37 46 28 20

输出样例:(第一行是完成所有任务的最优化时间)

95

#include<bits/stdc++.h>
using namespace std;
/*
10
7
67 45 80 32 59 95 37 46 28 20
*/
int n,k,a[1010]={0},b[1010]={0},maxx=1e8;void dfs(int x,int t)
{if(t>=maxx){return ;}if(!x){maxx=t;return ;}bool vis[1010]={0};for(int i=1;i<=k;i++){if(vis[b[i]]) continue;vis[b[i]]=true;b[i]+=a[x];dfs(x-1,max(t,b[i]));b[i]-=a[x];}return ;
}int main()
{cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);dfs(n,0);cout << maxx<<endl;return 0;
}

4. 运动员最佳匹配问题

问题描述:

羽毛球队有男女运动员各n 人。给定2 个n×n 矩阵P 和Q。P[i][j]是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响,P[i][j]不一定等于Q[j][i]。男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[j][i]。设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

编程任务:

给定2 个n×n 矩阵P 和Q。P[i][j]是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势。设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使得

()的值最大化。并输出最大值。

输入样例:(第一行是男队员(或女队员)的个数,第二、三、四行是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势,第五、六、七行是女运动员i和男运动员j配合的女运动员竞赛优势)

3

10 2 3

2 3 4

3 4 5

2 2 2

3 5 3

4 5 1

输出样例:(第一行是竞赛优势的最大和)

52

#include<bits/stdc++.h>
using namespace std;
/*
3
10 2 3
2 3 4
3 4 5
2 2 2
3 5 3
4 5 1
*/
int n;
int p[30][30],q[30][30],s[30],maxx=0;
bool vis[30];void dfs(int x,int summ)
{if(x>n){maxx=max(summ,maxx);}for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=1;dfs(x+1,summ+p[x][i]*q[i][x]);vis[i]=0;}}
}int main()
{cin>>n;for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){cin>>p[i][j];}}for(int i=1; i<=n; i++){for(int j=1; j<=n; j++){cin>>q[i][j];}}dfs(1,0);cout << maxx<<endl;return 0;
}

 

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

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

相关文章

深度学习常见概念字典(感知机、全连接层、激活函数、损失函数、反向传播、过拟合等)

这一章的所有内容均是为了进入深度学习具体的某某网络而准备的&#xff0c;简单但是非常有必要。 1. 神经网络&#xff08;neural networks&#xff09;的基本组成 1.1 神经元&#xff08;neuron&#xff09; 神经元&#xff08;neuron&#xff09; 是神经网络&#xff08;n…

Djiango实现用户管理增删改成功能实战

1.0定义 前后端不分离模式 前后端分离是指前端页面看到的效果都是由后端控制&#xff0c;即后端渲染HTML页面&#xff0c;前端与后端的耦合度比较高 前后端分离模式 后端仅返回前端所需要的数据&#xff0c;不在渲染HTML页面&#xff0c;不在控制前端的效果&#xff0c;至…

CodeQL代码静态污点分析引擎排查漏洞模式

文章目录前言环境搭建1.1 codeql基础1.2 vscode插件1.3 生成数据库1.4 HelloWorldcodeql语法2.1 语法结构2.2 常用类库2.3 谓词介绍2.4 污点分析漏洞检测3.1 初步结果3.2 解决误报总结前言 对于代码审计的工作&#xff0c;最早期的安全人员会以人工审计的方式来审计项目代码&a…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.1 消息的可靠投递 7.1.1 confirm【确认模式】

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.1 消息的可靠投递7.1.1 confirm【确认模式】第二天 高级 7 RabbitMQ 高级特性 7.1 消息的可靠投递 7.1.1 confirm【确认模式】 在使用 Ra…

【数据预处理】基于Pandas的数据预处理技术【california_housing加州房价数据集】_后9个任务

文章目录一.需求分析二.需求解决2.1 对第一个特征&#xff08;收入中位数&#xff09;排序后画散点图2.2 对第一个特征&#xff08;收入中位数&#xff09;画分位数图并分析2.3 【选做】对所有特征画分位数图并进行分析2.4 使用线性回归方法拟合第一个特征&#xff08;收入中位…

【C语言进阶】指针练习题

写在前面 这是指有关指针的小题 正文 练习一 int main() {int a[5][5];int (*p)[4];pa;printf("%p,%d", &p[4][2]-&a[4][2], &p[4][2]-&a[4][2] );return 0; } 解析&#xff1a; a[4][2]为如图粉色部分&#xff0c;p[4][2]为如图蓝色部分。a的…

Java项目:springboot药品管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目属于前后端分离的项目&#xff0c;分为两个角色药品管理员和取药处人员 药品管理员&#xff1a; 登录、退出、药品信息录入、药厂信息录入…

买不到的数目(蓝桥杯C/C++A组真题详解)

题目详细&#xff1a; 题目思路&#xff1a; 对于这个题有一个定理 如果 a,b 均是正整数且互质&#xff0c;那么由 axby&#xff0c;x≥0&#xff0c;y≥0 不能凑出的最大数是 &#xff1a; a*b-a-b 具体的证明过程这里就不赘述 感兴趣的同学可以自行查找 这里就提供一种思…

RabbitMQ 第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级7 RabbitMQ 高级特性7.2 Consumer Ack7.2.1 Consumer Ack7.2.2 Consumer Ack 小结7.2.3 消息可靠性总结第二天 高级 7 RabbitMQ 高级特性 7.2 Consumer Ack 7.2.…

C#语言实例源码系列-伪装文件

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

matlab神经网络求解最优化,matlab神经网络训练数据

1、神经网络的准确率是怎么计算的&#xff1f; 其实神经网络的准确率的标准是自己定义的。 我把你的例子赋予某种意义讲解&#xff1a; 1&#xff0c;期望输出[1 0 0 1]&#xff0c;每个元素代表一个属性是否存在。像着4个元素分别表示&#xff1a;是否肺炎&#xff0c;是否肝…

你可能不知道的DOM断点调试技巧

前言 作为一个前端&#xff0c;DOM断点应该是我们非常熟悉的&#xff0c;也是我们日常工作中经常要用到的一种调试技巧&#xff1b;但是下面这些DOM断点调试技巧你可能不知道&#xff0c;且听我一一道来。 监听元素 有这样一种场景&#xff0c;当DOM中某个元素移除或者元素属…

数据结构---图

&#xff08;一&#xff09; 相关知识点 图&#xff08;graph&#xff09;&#xff1a;图是由顶点的有穷非空集合和顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G(V,E)&#xff0c;其中&#xff0c;G表示一个图&#xff0c;V是图G中的顶点的集合&#xff0c;E是图G…

从模型到服务——iDesktopX处理自动化工具实现BIM模型到三维服务发布

目录前言一、 处理自动化模型二、 算子参数设置1、 使用迭代数据集打开导出后的BIM模型2、 移除重复点、重复面和重复子对象3、 模型生成缓存4、 三维切片缓存发布5、 执行结果前言 BIM模型在SuperMap实际使用的业务流程中常常需要在桌面产品中生成缓存&#xff0c;然后通过iS…

QT多窗口编程与文件IO编程

目录 一、消息对话框 QMessageBox&#xff08;掌握&#xff09; 二、常用窗口类&#xff08;掌握&#xff09; 三、主窗口类 QMainWindow&#xff08;重点&#xff09; 四、parent参数&#xff08;掌握&#xff09; 五、窗口传参 5.1 成员函数/构造函数 5.2 信号槽传参 六、事件…

Android开发进阶——binder通讯学习

什么是binder 通常意义下&#xff0c;binder指的是一种通信机制对Server端来说&#xff0c;Binder指的是Binder本地对象&#xff0c;对于Client端来说&#xff0c;Binder指的是Binder代理对象对于传输过程而言&#xff0c;binder是可以跨进程传输的对象 Binder的基本原理 Bi…

MySQL 管理

文章目录启动及关闭 MySQL 服务器MySQL 用户设置/etc/my.cnf 文件配置管理MySQL的命令启动及关闭 MySQL 服务器 首先&#xff0c;我们需要通过以下命令来检查MySQL服务器是否启动&#xff1a; ps -ef | grep mysqld如果MySql已经启动&#xff0c;以上命令将输出mysql进程列表…

node.js+uni计算机毕设项目基于微信小程序的美甲预约系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

Docker安装Zookeeper教程(超详细)

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…

【Linux】进程间通信之共享内存

目录&#x1f308;前言&#x1f338;1、System V共享内存&#x1f361;1.1、概念&#x1f362;1.2、原理&#x1f33a;2、共享内存相关函数和指令&#x1f361;2.1、shmget函数&#xff08;创建&#xff09;&#x1f362;2.2、shmctl函数&#xff08;控制&#xff09;&#x1f…