12.29最小生成数K算法复习(注意输入输出格式),校园最短路径(通过PRE实现路径输出,以及输入输出格式注意)

7-2 最小生成树-kruskal算法 分数 15

const int maxn = 1000;
struct edge {int u, v, w;
}e[maxn];
int n, m, f[30];
bool cmp(edge a, edge b) {return a.w < b.w;
}
int find(int x) {if (f[x] == x) {return x;}else {f[x] = find(f[x]);return f[x];}
}    //int arr[100];//int n;//cin >> n;//for (int i = 1; i <= n; i++)cin >> arr[i];
cin >> n >> m;
for (int i = 1; i <= n; i++)f[i] = i;
for (int i = 1; i <= m; i++) {cin >> e[i].u >> e[i].v >> e[i].w;
}
sort(e + 1, e + m + 1, cmp);
for (int i = 1; i <= m; i++) {int a = find(e[i].u), b = find(e[i].v);if (a != b) {f[a] = b;if (e[i].u > e[i].v) { cout << e[i].v << "," << e[i].u << "," << e[i].w << endl; }else {cout << e[i].u << "," << e[i].v << "," << e[i].w << endl;}}else {continue;}
}

7-1 校园最短路径 分数 10

主要是怎么打印路径,以及输入的格式,怎么转换这个输入格式

用pre数组,用string,然后在string里,用find,用字符下标,都转换为int型

链式前向星+堆优化dij

用pre数组记录前驱节点的索引,就是在string里的下标,也通过string类里的find函数找到相应字符的下标

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_map>
#include<string>
#include<cstdio>
#include<map>
using namespace std;
struct edge {int v, w, next;
}e[102];
int h[102], n, m, pre[102], dis[102], cnt = 0;
string s;
bool vis[102] = { 0 };
void add(int u, int v, int w) {e[++cnt].v = v;e[cnt].w = w;e[cnt].next = h[u];h[u] = cnt;
}
void print(int x) {if (!x) {cout << s[0];return;}print(pre[x]);cout << "->" << s[x];
}
typedef pair<int, int>pii;
priority_queue<pii, vector<pii>, greater<pii>>q;
int main() {cin >> n >> m >> s;for (int i = 0; i < n; i++)dis[i] = 1e8;for (int i = 1; i <= m; i++) {string a;int w;cin >> a >> w;add(s.find(a[0]), s.find(a[1]), w);add(s.find(a[1]), s.find(a[0]), w);}dis[0] = 0, vis[0] = 1, pre[0] = -1;for (int i = h[0]; i; i = e[i].next) {dis[e[i].v] = e[i].w;q.push({ dis[e[i].v],e[i].v });pre[e[i].v] = 0;}while (!q.empty()) {int d = q.top().first, u = q.top().second;q.pop();if (vis[u])continue;vis[u] = 1;for (int i = h[u]; i; i = e[i].next) {int v = e[i].v;if (dis[v] > dis[u] + e[i].w) {dis[v] = dis[u] + e[i].w;q.push({ dis[v], v });pre[v] = u;}}}for (int i = 0; i < n; i++) {if (dis[i] >= 1e8) {cout << "dist[" << s[0] << "][" << s[i] << "]=" << 256 << endl;cout << s[i] << endl;}else {cout << "dist[" << s[0] << "][" << s[i] << "]=" << dis[i] << endl;print(i);cout << endl;}}return 0;
}

邻接矩阵+朴素dij

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_map>
#include<string>
#include<cstdio>
#include<map>
using namespace std;
int g[1000][1000], dis[1000], pre[1000], n, m;
bool vis[1000] = { 0 };
string s;
void print(int x) {if (pre[x] == -1) {cout << s[0];return;}print(pre[x]);cout << "->" << s[x];
}
int main() {cin >> n >> m;cin >> s;for(int i=0;i<n;i++){for(int j=0;j<n;j++){g[i][j]=1e8;}}for (int i = 0; i < n; i++)dis[i] = 1e8;for (int i = 1; i <= m; i++) {string a;int w;cin >> a >> w;int j = s.find(a[0]), k = s.find(a[1]);g[j][k] = w;g[k][j] = w;}dis[0] = 0, pre[0] = -1;for (int i = 1; i <= n - 1; i++) {if (g[0][i])dis[i] = g[0][i];}for (int i = 1; i <= n - 1; i++) {int  u = -1;for (int j = 1; j <= n - 1; j++) {if (!vis[j] && (u == -1 || dis[u] > dis[j])) {u = j;}}vis[u] = 1;for (int j = 1; j <= n - 1; j++) {if (dis[j] >dis[u] + g[u][j]) {pre[j] = u;dis[j] = dis[u] + g[u][j];}}}for (int i = 0; i < n; i++) {if (dis[i] >= 1e8) {cout << "dist[" << s[0] << "][" << s[i] << "]=" << 256 << endl;cout << s[i] << endl;}else {cout << "dist[" << s[0] << "][" << s[i] << "]=" << dis[i] << endl;print(i);cout << endl;}}return 0;
}

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

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

相关文章

vue脚手架安装

1、安装&#xff1a; npm i vue/cli -g(-g全局安装,全名global) vue --version 查看版本号 2、使用 vue create 项目名称 3、安装选择项 最后一个选N

【Redis-03】Redis数据结构与对象原理 -下篇

承接上篇【Redis-02】Redis数据结构与对象原理 -上篇 8. type-字符串string 8.1 字符串的三种encoding编码&#xff08;int embstr raw&#xff09; 如果保存的是整型&#xff0c;并且可以用long类型标识&#xff08;-9223372036854775808到9223372036854775807&#xff09…

【热学】欧阳欣院士北京大学

笔记正在逐渐完善Ing~博主主页还有其他上万字精品笔记欢迎自取 ​编辑P1第1讲 绪论 33:01 关于热学的基本概念和原理的讲解。热学是一门基础科学&#xff0c;它涉及到热运动和热力学的规律。热运动是指物体内部粒子的无序运动&#xff0c;热力学是研究热运动的宏观规律。视频介…

IO进程线程 day1 IO基础+标准IO

1、使用fgets统计一个文件的行号 #include <stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("1.c","r"))NULL){return -1;}int count0;char buf;while(buf!EOF){b…

C++多态性——(1)初识多态

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 苦难和幸福一样&#xff0c;都是生命盛…

写代码易错点整理

写代码易错点整理 变量重复声明引用的swap使用push_back更好用背包 变量重复声明 会导致越界错误&#xff0c;结果错误等。调试时会发现某个值突然很大&#xff0c;有可能是重复声明导致的。 引用的swap使用 比如一个函数中 bool func(vector<vector<int>>&…

openFeign调用接口时传递表单参数、Json参数、HttpServletRequest对象

目录 一、控制器二、Feign客户端 openFeign调用接口时传递Json参数以及httpservletrequest对象 一、控制器 RestController RequestMapping("test") public class TestController {/*** 用来测试表单参数传递&#xff1a;单个参数*/PostMapping(value "/formD…

modelsim安装使用

目录 modelsim 简介 modelsim 简介 ModelSim 是三大仿真器公司之一mentor的产品&#xff0c;他可以模拟行为、RTL 和门级代码 - 通过独立于平台的编译提高设计质量和调试效率。单内核模拟器技术可在一种设计中透明地混合 VHDL 和 Verilog&#xff0c;常用在fpga 的仿真中。 #…

PAT乙级1045 快速排序

著名的快速排序算法里有一个经典的划分过程&#xff1a;我们通常采用某种方法取一个元素作为主元&#xff0c;通过交换&#xff0c;把比主元小的元素放到它的左边&#xff0c;比主元大的元素放到它的右边。 给定划分后的 N 个互不相同的正整数的排列&#xff0c;请问有多少个元…

Pointnet++环境配置(Windows11和ubuntu)及训练教程

本文使用的是Pytorch版本的Pointnet代码&#xff0c;主要包含完整的环境配置及训练过程&#xff0c;包括在训练时遇到的坑。 目录 1.Windows11环境配置 2.Ubuntu环境配置 3.训练教程 3.1分类&#xff08;Classification&#xff09;训练 3.2零件分割&#xff08;Part Segme…

leetcode中shell题解

常见的shell awk用法 # grades.txt 如下&#xff1a;Alice 85 Bob 92 Charlie 78 Alice 90 Bob 88# awk程序 {name $1score $2sum[name] scorecount[name] }END {for (name in sum) {avg sum[name] / count[name]printf "学生 %s 的平均分是 %.2f\n", name, av…

中科亿海微UART协议

引言 在现代数字系统设计中&#xff0c;通信是一个至关重要的方面。而UART&#xff08;通用异步接收器/发送器&#xff09;协议作为一种常见的串行通信协议&#xff0c;被广泛应用于各种数字系统中。FPGA&#xff08;现场可编程门阵列&#xff09;作为一种灵活可编程的硬件平台…

个体诊所软件方案,农村医疗服务站社区门诊电子处方管理系统软件教程

个体诊所软件方案&#xff0c;农村医疗服务站社区门诊电子处方管理系统软件教程 一、软件程序问答 1、处方单软件有病历汇总吗 如下图&#xff0c;软件以 佳易王电子处方软件V17.2版本为例说明 点击 病历汇总统计 按钮&#xff0c; 可以按明细查询或病历汇总查询&#xf…

基于JavaWeb实验室预约管理系统(源码+数据库+文档)

一、项目简介 本项目是一套基于JavaWeb实验室预约管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;e…

rime中州韵 help lua Translator

lua 是 Rime中州韵/小狼毫输入法强大的武器&#xff0c;掌握如何在Rime中州韵/小狼毫中使用lua&#xff0c;你将体验到什么叫 随心所欲。 先看效果 在 rime中州韵 输入效果一览 中的 &#x1f447; help效果 一节中&#xff0c; 我们看到了在Rime中州韵/小狼毫输入法中输入 h…

cpu优化方法

如何看谁拉高了cpu&#xff1f; cpu高的时候有没有抓到进程threadtop&#xff0c;从threadtop找到top 3线程和正常场景对比一下就知道是否有异常对明显有异常的线程&#xff0c;看下是否抓到simplerperf trace或systrace&#xff0c;从trace中找到高频调用栈是否异常如果没有…

力扣133. 克隆图

深度优先遍历 思路&#xff1a; 使用一个哈希表存储已经被克隆过的节点&#xff0c;key 为原节点&#xff0c;value 为克隆的节点&#xff1b;从原节点开始遍历&#xff0c;如果已经被克隆过&#xff0c;则回到其克隆节点&#xff1b;否则&#xff0c;克隆该节点&#xff0c;并…

常见位运算模板方法总结(包含五道例题)

哈喽大家好&#xff0c;今天博主给大家带来算法基础常见位运算的模板&#xff0c;可以说大家遇到的百分之九十与位运算有关的题都可以用得上。话不多上我们上干货&#xff1a; 一.基础位运算符 << 左移运算符 >> 右移运算符 ~ 取反 & 与运算 | …

八股文打卡day18——操作系统(1)

面试题&#xff1a;进程和线程的区别&#xff1f; 我的回答&#xff1a; 1.概念上。进程是系统进行资源分配和调度的基本单位。线程是系统进行运算调度的最小单位。线程是进程的子任务&#xff0c;一个进程至少包含一个线程&#xff0c;一个进程可以运行多个线程&#xff0c;…

【Linux--多线程同步与互斥】

目录 一、线程互斥1.1相关概念介绍1.2互斥量mutex1.3互斥量接口1.3.1初始化互斥量1.3.2销毁互斥量1.3.3互斥量加锁1.3.4互斥量解锁1.3.5使用互斥量解决上面分苹果问题 1.4互斥原理 二、可重入与线程安全2.1相关概念2.2常见线程不安全的情况2.3常见不可重入的情况2.4 可重入与线…