ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法第五章上机实践报告

2021-12-11 14:00:30  阅读:138  来源: 互联网

标签:遍历 上机 int 选择 cc 算法 第五章 回溯 100


算法第五章上机实验报告

一、回溯法分析

1.1 说明“最小重量机器设计问题”解空间

首先可以先将第一个工作分配给第一个人,那么第一个工作就已经完成了,第二和第三个人可以从第二和第三个工作中选择,分别出现各自对应的两种情况。其次,第一个人也可以选择第二和第三个工作,那么就是每个人都有可能对应每一个工作,这个问题的解空间就是一颗排列Tree,其每一个节点的策略是选择剩下的元素的一个。

1.2 说明 “最小重量机器设计问题"的解空间树

img

如图所示,问题的解空间树与之类似。(除去A-B)

首先从B-CDE即为第一个人选择的三个不同的工作,对应三种不同的情况。如果选择B-D,那么第二个人就还有剩下两种选择,H和I,当第二个人选择其中的一种,第三个人都只剩下一种情况即N或者O。

1.3在遍历解空间树的过程中,每个结点的状态值

在遍历解空间树的时候,每个每个节点的状态值就是当前层数(对应第几个人)的选择工作以及到这个人位置所累计的工作费用。

二、我对回溯法的理解

代码实现

#include <iostream>
using namespace std;

int work[100][100]={0};
int x[100]={0};
int minc=1000000,cc=0;
int n;

void backtrack(int t){
	if(t>n){
		if(cc < minc){
			minc = cc;
		}
		return;
	}
	
	for(int i=1;i<=n;i++){
		if(x[i]==0){
		cc += work[t][i];
		x[i]=1;
		if(cc<minc)
		backtrack(t+1);
		x[i]=0;
		cc -= work[t][i];
		}
	}
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>work[i][j];
		}
	}
	backtrack(1);
	cout<<minc;
	return 0;
}

理解收获:回溯法是利用计算机进行每一种情况进行遍历,以此来得到我们所需要的最终结果,在算法递归遍历的时候,我们需要进行剪纸操作,否则递归层数太多会导致运算时间过长。另外,回溯法每到达一次叶节点,就代表一个结果的出现,并且与理想结果比较,若是,则保存,若不是,则return进行回溯到上一个子问题所得到的结果然后进行再次遍历。回溯法根据需要我们要保存状态并记得状态修改。

标签:遍历,上机,int,选择,cc,算法,第五章,回溯,100
来源: https://www.cnblogs.com/gdufsgzw/p/15675381.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有