项目结束倒数2

news2024/11/20 15:25:20

今天,解决了,多个点的最短路问题

用的dfs,配上了floyed计算出的广源距离

难点是要记录路线,dfs记录路线就很烦

但是好在结束了,经过无数的测试,确保没啥问题(应该把)

来看看我的代码


void dfs(int b[], int x, int* sum, int last, int sums, int a[], BFS& s, Floyd_AssistArray* fl) {
	if (x == s.size) {
		if (*sum > sums) {
			*sum = sums;
			printf("sun %d\n", *sum);
			for (int ko = 2;ko <= s.size;ko++) {
				b[ko] = a[ko];
				printf("ssssss\n");
			}
		}
	}
	else {
		for (int ko = 2;ko <= s.size;ko++) {
			if (s.map[s.mapr[ko]] == 0&&fl->Shortest[last][s.mapr[ko]]!=nocnect) {
					x++;
					printf("sss%d\n", x);
					sums += fl->Shortest[last][s.mapr[ko]];
					printf("sum%d\n", sums);
					s.map[s.mapr[ko]] == 1;
					a[x] = s.mapr[ko];
					dfs(b, x, sum, s.mapr[ko], sums, a, s, fl);
					a[x] = 0;
					sums-= fl->Shortest[last][s.mapr[ko]];
					s.map[s.mapr[ko]] == 0;
					x--;
				}
			}
		}
	}
//bfs,的算法,返回距离最短的,走法

void findr(int i, int a[], AMGraph* f, Floyd_AssistArray* fl) {
	int b[11] = { 0 };
	b[1] = i;//起点
	int j = 1;
	for (int io = 1;io <= 10;io++) {
		if (a[io] != 0 &&io!=i) {
			j++;
			b[j] = io;
		}
	}
	for (int gh = 1;gh <= j;gh++) {
		printf("%d\n", b[gh]);
	}

	BFS s;
	for (int j = 1;j <= 10;j++) {
		s.map[j] = 0;
		s.mapr[j] = b[j];
	}
	s.map[i] = 1;//给起点标记
	s.mapr[1] = i;
	s.size = j;
	int sum = nocnect;
	int c[11] = { 0 };
	c[1] = i;
	dfs(b, 1, &sum, i, 0, c, s, fl);

	
	//print();
}
//处理信息

可以看到,bfs函数传的东西有点多

没办法,我来解释一下,b数组是返回答案的数组,sum是返回最短距离的最终答案

x是搜到了第几个数(第几个点),last是记录上个点,要的是两点之间的距离,所以要记录上个点

sums是记录距离和

a数组是记录点的

BFS 是提供dfs要的变量,比如标记的地图

和原来的点集以及有几个点

Floyd_AssistArray* fl  我们要的距离

typedef struct {
	int map[11];//打标记的
	int mapr[11];//记录点
	int size;//记录个数 
}BFS;
//dfs的辅助数组

辅助数组的核心内容

接下来就是界面

为了可以,直接点击输入点把界面又搞了一下

 

黑色代表景点,被选中了,也可以取消选中 

跑完bfs的数组就要开始回溯了路路径了

PathStack ph;
	ph.top = 0;
	for (int h = 1;h <= s.size;h++) {
		printf("%d\n", b[h]);
	}
	
	for (int jk = s.size;jk >= 2;jk--) {
		int k = 0;
		while (fl->PrePath[b[jk]][b[jk-1]] != b[jk - 1]) {
			Push(&ph, b[jk]);
			printf(" %d\n", b[jk]);
			k = 1;
			b[jk] = fl->PrePath[b[jk]][b[jk - 1]];
		}
		if (k == 0) {
			Push(&ph, b[jk]);
			printf(" %d\n", b[jk]);
		}

回溯到栈内,明天写了输出函数就可以用栈直接遍历了 

胜利就在眼前了呀!!现在811行

明天基本上得有1k了,但是还是写的很不好哎呀我是真的菜

以上代码(的bug全部测试完了,痛真的太痛了)

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

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

相关文章

Java核心技术 卷1-总结-14

Java核心技术 卷1-总结-14 映射更新映射项弱散列映射链接散列集与映射枚举集与映射 视图与包装器轻量级集合包装器 映射 更新映射项 处理映射时的一个难点就是更新映射项。正常情况下&#xff0c;可以得到与一个键关联的原值&#xff0c;完成更新&#xff0c;再放回更新后的值…

【二叉树】遍历二叉树

前言 二叉树有前中后序和层序四种常用的遍历方式&#xff0c;今天我们来学习一下如何用这四种方法遍历二叉树。 前序&#xff1a;根、左、右 中序&#xff1a;左、右、根 后序&#xff1a;左、右、根 层序&#xff1a;第一层、第二层… 递归 递归是一种将复杂问题不断细分成…

RHCE(五)

目录 一.判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间 1.创建脚本test1.sh 2.下载邮件服务并执行 3.测试 4.做计划任务 二.判断web服务是否运行&#xff08;1、查看进程的方式判断该程…

ChatGPT 速通手册——模仿唐诗宋词,和模仿莎士比亚十四行诗的中英文差距

模仿唐诗宋词&#xff0c;和模仿莎士比亚十四行诗的中英文差距 根据前文介绍的三大反例特性&#xff0c;我们可以尝试给出几个典型的反例。比如诗词创作&#xff0c;尤其是长短句约束更加严格的词牌&#xff0c;对照反例特性&#xff1a; 有明确且唯一可行的标准定义——一个…

Windows OpenVino安装squeezenet1.1失败 —— 已解决

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,python领域博主爱笑的男孩。擅长深度学习,YOLO,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollec…

【排序】冒泡排序与快速排序(三个版本+非递归图示详解哦)

全文目录 引言冒泡排序快速排序思路实现Hoare版本快排优化 挖坑法前后指针法 快排非递归版本思路实现 总结 引言 在这篇文章中&#xff0c;将继续介绍排序算法&#xff1a;冒泡排序与快速排序&#xff1a; 它们都属于交换排序&#xff0c;即通过两两比较交换&#xff0c;将较…

小朋友崇拜圈+灌溉(JAVA解法)

目录 小朋友崇拜圈 题目链接&#xff1a; 题目描述 输入描述 输出描述 输入输出样例 灌溉 题目链接&#xff1a; 题目描述 输入描述 输出描述 输入输出样例 小朋友崇拜圈 题目链接&#xff1a; https://www.lanqiao.cn/problems/182/learning/?page5&first_c…

手撕源码(一)HashMap-JDK8

目录 1.使用示例2.new HashMap<>() 解析2.1 加载因子2.2 构造方法 3.put() 解析3.1 原始put(k, v)3.2 计算哈希1&#xff09;为什么要进行二次hash&#xff1f;2&#xff09;二次hash计算示例&#xff1a;3&#xff09;为什么使用 (length-1)&hash 而不是 hash%lengt…

互联网医院系统|线上问诊系统定制|互联网医院源码开发技术

当下医疗成为人们比较关注的问题&#xff0c;移动医疗技术不断的进步&#xff0c;互联网医院系统成为了医疗企业发展的必经之路&#xff0c;通过移动终端与互联网医院系统进行连接&#xff0c;实现医疗服务的远程交互与管理。可以使医疗机构的医生通过移动设备随时随地的查看患…

词的表示方法笔记——词向量+代码练习

词的表示方法&#xff1a; 一、one-hot&#xff08;最简单&#xff09; 独热编码是一种将单词转化为稀疏向量的方法&#xff0c;其中每个单词都表示为一个只有一个元素为1其余元素均为0的向量&#xff0c;其维度由词库的大小决定。。例如&#xff0c;对于包含 4个单词的词汇表 …

Python二分查找(折半查找)的实现

时间复杂度 最优时间复杂度&#xff1a;O(1) 最坏时间复杂度&#xff1a;O(logn) 思路 对有序的顺序表进行查找&#xff0c;以下标查找&#xff0c;每次取一半查找&#xff0c;如[1,2,3,4,5,6,7,8,9]&#xff0c;查3, 下标从0~8&#xff0c;(08)//24,对比折半到下标为2的元素…

【基础算法】栈和队列

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招算法的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于代码随想录进行的&#xff0c;每个算法代码参考leetcode高赞回答和…

手写axios源码系列二:创建axios函数对象

文章目录 一、模块化目录介绍二、创建 axios 函数对象1、创建 axios.js 文件2、创建 defaults.js 文件3、创建 _Axios.js 文件4、总结 当前篇章正式进入手写 axios 源码系列&#xff0c;我们要真枪实弹的开始写代码了。 因为 axios 源码的代码量比较庞大&#xff0c;所以我们这…

Xilinx FPGA下如何加快QSPI Flash加载速度

1. 首先&#xff0c;不同型号的FPGA对外部QSPI Flash支持的最高频率是不一样的。XC6SLX45支持的最高频率仅为26MHz&#xff0c; 而XC7K325T支持的最高频率高达66MHz。 所以&#xff0c;当我们添加 set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design] 的时候&…

特征选择算法 | Matlab实现基于互信息特征选择算法的分类数据特征选择 MI

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 特征选择算法 | Matlab实现基于互信息特征选择算法的分类数据特征选择 MI 部分源码 %

【1105. 填充书架】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给定一个数组 books &#xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先…

题目3180:蓝桥杯2023年第十四届省赛真题-互质数的个数======及探讨互质专题

原题链接 https://www.dotcpp.com/oj/problem3162.html 想直接看题解的&#xff0c;跳转到第三次尝试即可。 已AC。 解析&#xff1a; &#xff08;1&#xff09;首先大家要知道什么叫互质&#xff1a; 以及它们的性质&#xff1a; 欧拉函数 在数论中&#xff0c;对正整…

世界读书日|这些值得程序员反复阅读的经典书

2023年是第28个世界读书日&#xff0c;每年的这个时候&#xff0c;小编都会准备一份书单与您分享。 与经典同行&#xff0c;伴书香成长。小编今天推荐一份值得程序员反复阅读的经典书。 1、浪潮之巅 第四版 这不只是一部科技产业发展历史集…… 更是在这个智能时代&#xff…

【远程工具】- MobaXterm 的下载、安装、使用、配置【Telnet/ssh/Serial】

一、MobaXterm 概述 在远程终端工具中&#xff0c;secureCrt 和 XShell 是两款比较有名的远程工具&#xff0c;但这两款软件现在都是收费的&#xff0c;有些公司不允许破解使用。今天就推荐一款免费的、免安装的、功能丰富的远程终端软件–MobaXterm。 MobaXterm是由Mobatek开…

JavaScript概述三(循环结构+BOM浏览器对象模型+JSON对象)

1.循环结构 1.1 普通循环(for循环,while循环,do……while循环) JavaScript中的普通循环和Java中的普通循环基本类似&#xff0c;此处以for循环为例&#xff0c;while和do……while便不再赘述。 <script type"text/javascript">var ary1new Array(1,false,嘿嘿…