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.hqwc.cn/news/313805.html

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

相关文章

10. UVM Environment

环境为agents, scoreboards和其他验证组件&#xff08;包括有助于在 SoC 级别重用块级环境组件的其他环境类&#xff09;提供良好的层次结构和容器。用户定义的 env 类必须从 uvm_env 类扩展。 10.1 uvm_env class hierarchy 类声明&#xff1a; virtual class uvm_env extend…

Android长按图标展示快捷方式

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {new Thread(() -> {// 获取ShortcutManager实例ShortcutManager shortcutManager getSystemService(ShortcutManager.class);// 创建要添加的快捷方式ShortcutInfo.Builder shortcutBuilder new ShortcutInfo.Bui…

数据结构模拟实现LinkedList双向不循环链表

目录 一、双向不循环链表的概念 二、链表的接口 三、链表的方法实现 &#xff08;1&#xff09;display方法 &#xff08;2&#xff09;size方法 &#xff08;3&#xff09;contains方法 &#xff08;4&#xff09;addFirst方法 &#xff08;5&#xff09;addLast方法 …

【Java基础篇】While(true) 和 for(;;)哪个性能更好呢

两个无限循环的性能分析 ✔️两者反编译比较 ✔️两者反编译比较 While(true) 和 for(; &#x1f609; 都是做无限循环的代码&#xff0c;他们两个有什么区别呢&#xff1f; 关于这个问题&#xff0c;网上有很多的讨论&#xff0c;今天我收到私信&#xff0c;所以凑着假期&…

软件功耗管理

一、背景 功耗管理是由软件、处理器、外设、电源等一起构成的系统问题。 App中很小的低效行为在整个系统中累加后&#xff0c;会对电池寿命、性能、响应速度和温度产生明显的影响。作为app开发人员&#xff0c;我们有责任确保我们的app尽可能高效地运行。使用苹果推荐的API&a…

消息队列LiteQueue

文章目录 一、简介二、设计2.1 队列结构设计2.2 队列接口设计 三、实现3.1 队列锁的实现3.2 创建队列3.3 写入队列3.4 读出数据3.5 判断队列是否为空3.6 判断队列是否为满3.7 清空队列3.8 删除队列 四、测试参考 一、简介 收到消息时先把接收到的消息放到队列中。在任务中从队…

31K star!替换Postman ,开源优雅的API工具:Insomnia

API 调试工具大家第一个想到的肯定是Postman&#xff0c;但是这几年Postman在国内越来越难用&#xff0c;很多人也都在考虑找一个替代品。 今天我们来推荐一个可以替换掉Postman的 API 工具&#xff0c;他开源、支持本地使用&#xff0c;也更加轻量、更加优雅&#xff0c; 目前…

ROS TF坐标变换 - TF树

目录 一、TF树介绍二、TF2与TF三、构建TF树四、rviz查看TF坐标关系 一、TF树介绍 在机器人系统中&#xff0c;存在运动学模型和动力学模型。对于刚体机器人&#xff0c;动力学模型基于刚体动力学&#xff0c;代表机器人系统在运动过程中力/力矩与其运动状态的变化关系。而运动…

Python 基础语法01

变量声明 #运算 num 1 num 1 print("num 1",num)num - 1 print("num - 1", num)num * 4 print("num * 4",num)num 3 num % 2 print("num%2",num)num ** 2 print("num ** 2", num)num 9 num // 2 print("num // …

odoo17 | 创建一个新应用程序

前言 本章的目的是为创建一个全新的Odoo模块奠定基础。 我们将从头开始&#xff0c;以使我们的模块被Odoo识别所需的最低限度。 在接下来的章节中&#xff0c;我们将逐步添加功能以构建一个真实的业务案例。 教程 假设我门需要在odoo上开发一个新app模块例如房地产广告模块。…

C++的面向对象学习(9):文件操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、类的封装的多文件实现回顾二、文件操作1.对文件进行操作需要头文件<fstream>2.操作文件的三大类方法&#xff1a;读、写、读写 三、实现文本文件的读、写…

提取 PE 文件的各种信息

前段时间项目需要实现对 Windows PE 文件版本信息的提取&#xff0c;如文件说明、文件版本、产品名称、版权、原始文件名等信息。获取这些信息在 Windows 下当然有一系列的 API 函数供调用&#xff0c;简单方便。 我们先看一下PE文件结构&#xff0c;PE文件由DOS首部&#xff0…