数据结构---多源最短路径


数据结构—多源最短路径


原理:参考趣学数据结构

代码:

栈代码:

#pragma once
#include<stdio.h>
#define maxSize 100
typedef struct stack {int * base;int * top;
}stack;
bool init(stack & Stack) {//栈的初始化Stack.base = new int[maxSize];if (!Stack.base) {return false;}Stack.top = Stack.base;return true;
}
bool push(stack & Stack,int e) {//入栈if (Stack.top - Stack.base == maxSize) {//满栈,不能再插入return false;}*(Stack.top) = e;Stack.top++;return true;
}
bool pop(stack & Stack, int &e) {//出栈if (Stack.base == Stack.top) {//栈空return false;}Stack.top--;e = *(Stack.top);return true;
}
int getTop(stack &Stack) {if (Stack.base == Stack.top) {//栈空return -1;}return *(Stack.top - 1);
}
void printStack(stack Stack) {//遍历栈中的元素while (Stack.base != Stack.top) {printf("%d ", *(Stack.top - 1));Stack.top--;}
}
bool empty(stack Stack) {//栈空的判断if (Stack.base == Stack.top) {return true;}return false;
}
void testStack() {//测试栈是否有问题stack Stack;init(Stack);int value;while (1) {scanf_s("%d", &value);if (value == -1) {break;}push(Stack, value);}printStack(Stack);
}

多源最短路径代码:


#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
#define N 100
#define elemType int
//const int MAX_INT = (1 << 31) - 1;
//const int MAX_INT = 0X7fffffff;
#define  INF    (((unsigned int)(-1)) >> 1)
typedef struct GraphMatrix {elemType vNode[N][N];int vNum, eNum;
}GraphMatrix;
void findPath(GraphMatrix G, int dist[N][N], int p[N][N],stack &Stack);//声明
void initGMaxtix(GraphMatrix &G) {//初始化邻接矩阵printf("输入顶点数和边数\n");scanf_s("%d%d", &G.vNum, &G.eNum);for (int i = 0; i < G.vNum; i++) {//初始化邻接矩阵for (int j = 0; j < G.vNum; j++) {G.vNode[i][j]= INF;}}printf("输入顶点v1到顶点v2和其边的权重\n");for (int i = 0; i < G.eNum; i++) {int v1, v2, weights;scanf_s("%d%d%d", &v1, &v2, &weights);G.vNode[v1][v2]  = weights;}
}
void print10(GraphMatrix G) {printf("邻接矩阵如下:\n");for (int i = 0; i < G.vNum; i++) {for (int j = 0; j < G.vNum; j++) {printf("%d ", G.vNode[i][j]);}printf("\n");}
}
void print101(int result[N][N], int length) {for (int i = 0; i < length; i++) {for (int j = 0; j < length; j++) {printf("%d ", result[i][j]);}printf("\n");}printf("\n");
}
void Floyd(GraphMatrix G) {//多源最短路径求解int dist[N][N], p[N][N];//分别为多源点到其他点的距离和这段距离所经过的那些顶点的记录数组pfor (int i = 0; i < G.vNum; i++) {for (int j = 0; j < G.vNum; j++) {dist[i][j] = G.vNode[i][j];if (G.vNode[i][j] == INF || i==j ) {//对距离数组和记录数组初始化p[i][j] = -1;}else {p[i][j] = i;}}}for(int k=0;k<G.vNum;k++){for (int i = 0; i < G.vNum; i++) {//更新距离数组for (int j = 0; j < G.vNum; j++) {//注意INF+INF越界问题  如果没有发现多调试if (dist[i][k]<INF && dist[k][j]<INF && dist[i][k] + dist[k][j] < dist[i][j]) {dist[i][j] = dist[i][k] + dist[k][j];p[i][j] = p[k][j];}}}}//print101(dist, G.vNum);stack Stack;init(Stack);printf("输出多源最短路径的最优方案\n");findPath(G, dist, p,Stack);
}
void findPath(GraphMatrix G, int dist[N][N], int p[N][N], stack &Stack) {for (int i = 0; i < G.vNum; i++) {for (int j = 0; j < G.vNum; j++) {if (p[i][j] == -1) {//起点到起点printf("%d---%d不可达!\n", i, j);continue;}push(Stack, j);int x = p[i][j];while (x != -1) {//入栈查找路径push(Stack, x);x = p[i][x];}int e;while (!empty(Stack)) {//出栈遍历路径printf("%d", getTop(Stack));pop(Stack, e);if (Stack.top - Stack.base >= 1) {printf("---");}}printf(" 这段路径的距离为:%d\n", dist[i][j]);}}
}
int main() {GraphMatrix G;initGMaxtix(G);print10(G);printf("\n");Floyd(G);system("pause");return 0;
}

测试截图:

时间复杂度为O(n x n x n),空间复杂度为O(n x n)

如果存在什么问题,欢迎批评指正!谢谢!

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

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

相关文章

疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公

当前情况下&#xff0c;经常会有需要到公司电脑进行一些操作&#xff0c;比如连接内网OA&#xff0c;数据库或者提交文档。为了减少外出&#xff0c;将使用frp进行内网穿透的方法进行一个说明。前提条件1. 一台拥有公网 IP 的设备(如果没有&#xff0c;服务器可以使用https://d…

ad中电容用什么封装_二极管在电路中到底做什么用的

所有的电子电路中基本上都会用到二极管&#xff0c;它的特性也是非常之多&#xff0c;最主要就是单方向导电性&#xff0c;(单向导电性的两根引脚之间的电阻分为正向电阻和反向电阻两种)。人们利用这些不同特性构成各种具体的应用电路&#xff0c;分析不同电路中的二极管工作原…

[蓝桥杯2017决赛]数位和-模拟(水题)

题目描述 数学家高斯很小的时候就天分过人。一次老师指定的算数题目是&#xff1a;12…100。 高斯立即做出答案&#xff1a;5050! 这次你的任务是类似的。但并非是把一个个的数字加起来&#xff0c;而是对该数字的每一个数位作累加。这样从1加到100的“和”是&#xff1a;901 …

数据结构---邻接矩阵的DFS

数据结构—邻接矩阵的DFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define elemType int //const int MAX_INT (1 << 31) - 1; //const int MAX_INT 0X7fffffff; #define INF (((uns…

.NET Core 如何判断程序是否在远程桌面(RDP)下运行

点击上方蓝字关注“汪宇杰博客”导语由于疫情的关系&#xff0c;很久没发文章了。今天终于稳定下来在家办公&#xff0c;抽空分享一个刚学会的技巧。最近在家办公的程序员可能避免不了要用远程桌面&#xff0c;那么问题来了&#xff0c;你的 .NET Core 程序有没有办法知道自己是…

[蓝桥杯2018初赛]方格计数-巧妙枚举,找规,数论

解题思路&#xff1a; 枚举第一象限的所有点&#xff0c;判断是否在圆内&#xff0c;最后结果*4 我们用下面的程序&#xff0c;来算一个半径为2的圆&#xff0c;其实我们第一象限算的就是那个绿点&#xff0c;然后类比到半径5000. 代码如下&#xff1a; #include <iostre…

ipa在线安装搭建_三种越狱工具安装方法

从 iOS 9.2 开始&#xff0c;苹果越狱进入了半越狱时代&#xff0c;也就是重启手机之后需要重新进入越狱工具激活越狱环境&#xff0c;以下是三种常用的越狱工具安装方法&#xff1a;方法一&#xff1a;自签名下载大胡子签名工具&#xff1a;Cydia Impactor下载地址&#xff1a…

《ASP.NET Core 微服务实战》-- 读书笔记(第7章)

第 7 章 开发 ASP.NET Core Web 应用ASP.NET Core 基础在本章&#xff0c;我们将从一个命令行应用开始&#xff0c;并且在不借助任何模板&#xff0c;脚手架和向导的情况下&#xff0c;最终得到一个功能完整的 Web 应用GitHub链接&#xff1a;https://github.com/microservices…

git为私有仓库设置密码_dnf仓库密码设置不跳出 dnf仓库密码设置流程

部分玩家想要设置游戏中仓库密码但是自己不小心点击了不再提醒后不再弹出了&#xff0c;那么怎么办呢&#xff0c;其实不用着急&#xff0c;下面带大家了解一下如何设置设置仓库锁密码&#xff0c;感兴趣的玩家可以玩下看看哦。dnf仓库密码设置不跳出在游戏中玩家每天第一次登陆…

[蓝桥杯2019初赛]迷宫-bfs+存储路径

题目描述 下图给出了一个迷宫的平面图&#xff0c;其中标记为1 的为障碍&#xff0c;标记为0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这 个它的上、下、左、右四个…

word List 07

word List 07 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

TIOBE 2月编程语言排行榜新鲜出炉!C# 获3.08%增长率!

编程C# 刚经历了一次TIOBE考试&#xff0c;2020年2月&#xff0c;它拿到的最新分数是第5名。老牌编程语言Java独占鳌头&#xff0c;C语言紧随其后。诚然&#xff0c;工程师们对C# 的青睐&#xff0c;还没能影响到大多数企业&#xff0c;但增长率3.08%的势头&#xff0c;可凭此预…

AcWing 756. 蛇形矩阵

输入两个整数n和m&#xff0c;输出一个n行m列的矩阵&#xff0c;将数字 1 到 n*m 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格式 输入共一行&#xff0c;包含两个整数n和m。 输出格式 输出满足要求的矩阵。 矩阵占n行&#xff0c;每行包含m个空格隔开的整…

自动生成sqlserver增删改成_如何批量生成证书证件-可变条码-可变图片-可变数据-快速教程...

如何生成可变图像&#xff1f;如何生成可变文本&#xff1f;如何生成可变条码&#xff1f;如何使打印作业自动化&#xff1f;从多页设计中选取页使用几乎所有数据库程序中的数据库信息通过“拖放”创建个性化打印分享快速教程。1&#xff1a;批量自动化化印刷详细步骤如下&…

线性代数---矩阵的各种问题求解方法

线性代数—矩阵的各种问题求解方法 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

ERP开放平台定制化远程高效协作秘笈

疫情期间&#xff0c;远程研发协作办公成为各企业的主要工作方式&#xff0c;本文将明源云以往的研发实践&#xff0c;结合本次远程办公的实际经验&#xff0c;分享一下面对跨地区多团队&#xff0c;如何高效在线协同&#xff0c;保证研发质量与效率的实践经验。面对当前严重的…

[蓝桥杯2017初赛]跳蚱蜢-map标记+bfs+环形数组

解题思路&#xff1a; 这题如果我们考虑蚱蜢跳&#xff0c;有很多蚱蜢&#xff0c;有很多情况&#xff0c;所以我们让空盘跳&#xff0c;这样就简化题目了&#xff0c;然后我们化圆为直&#xff0c;将题目的情况看成字符串012345678&#xff0c;最后要变成087654321&#xff0c…

win10玩cf不能全屏_如何优化Win10游戏流畅运行?Win10游戏流畅运行优化教程

很多小伙伴们在安装了win10操作系统之后&#xff0c;运行游戏的过程中可能就会遇到游戏卡顿不流畅的情况。如何优化Win10游戏流畅运行&#xff1f;在这里小编为大家准备了一些解决游戏卡顿的小妙招&#xff0c;一起看下吧~如何优化Win10游戏流畅运行一. 关闭nagle算法很多人对于…

数据结构---邻接表的DFS

数据结构—邻接表的DFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define typeNode int //每个头结点的标识数据类型 #define N 100 //最大结点数 int degree[N]; int result[N]; bool visited[N]; typedef str…

简化MVVM属性设置和修改 - .NET CORE(C#) WPF开发

阅读导航常用类属性设置、获取方式二次封装 INotifyPropertyChangedDemo 展示、源码下载1. 常用类属性设置、获取方式public class Student : INotifyPropertyChanged {private string name;public string Name{get { return name; }set{if(name ! value){name value;OnProper…