使用邻接矩阵实现有向图最短路径Dijkstra算法 题目编号:1136

news/2025/3/29 16:29:33/

题目描述

用邻接矩阵存储有向图,实现最短路径Dijkstra算法,图中边的权值为整型,顶点个数少于10个。

部分代码提示:
#include
#include
using namespace std;

const int MaxSize = 10;
const int INF = 32767;

class MGraph
{
public:
MGraph(char a[], int n, int e);

void Dijkstra();

private:
char vertex[MaxSize];
int arc[MaxSize][MaxSize];
int vertexNum, arcNum;
};

MGraph::MGraph(char a[], int n, int e)
{
//write your code.

}

int Min(int dist[], int vertexNum)
{
//write your code.

}
void MGraph::Dijkstra()
{
//write your code.

}

int main()
{
int n = 0;
int e = 0;
cin >> n >> e;
char p[MaxSize];
int i = 0;

for (i=0; i<n; i++)
{cin >> p[i];
}MGraph MG(p, n, e);MG.Dijkstra();return 0;

}

输入描述

首先输入图中顶点个数和边的条数;
再输入顶点的信息(字符型);
再输入各边及其权值。

输出描述

依次输出从编号为0的顶点开始的从小到大的所有最短路径,每条路径及其长度占一行。

输入样例

5 7
A B C D E
0 1 6
0 2 2
0 3 1
1 2 4
1 3 3
2 4 6
3 4 7

输出样例

AD 1
AC 2
AB 6
ADE 8
内存阀值:50240K 耗时阀值:5000MS

代码

#include <iostream>
#include <string>
using namespace std;const int MaxSize = 10;
const int INF = 32767;class MGraph
{
public:MGraph(string a[], int n, int e);void Dijkstra();private:string vertex[MaxSize];int arc[MaxSize][MaxSize];int vertexNum, arcNum;
};MGraph::MGraph(string a[], int n, int e)
{//1、赋值vertexNum = n;arcNum = e;//2、顶点表for (int i = 0; i < vertexNum; i++)vertex[i] = a[i];//3、边表初始化for (int i = 0; i < vertexNum; i++)for (int j = 0; j < vertexNum; j++)arc[i][j] = INF;//4、边表赋值int i = 0, j = 0, w = 0;for (int k = 0; k < arcNum; k++){cin >> i >> j >> w;arc[i][j] = w;//arc[j][i] = w;//有方向的不用反复设置相同!!!!掉坑了我淦!}
}int Min(int dist[], int vertexNum)
{int min = INF;int pos = 0;for (int i = 0; i < vertexNum; i++){if (dist[i] < min && dist[i] != 0)//!=0?:存入的顶点不需要遍历{min = dist[i];pos = i;}}return pos;
}void MGraph::Dijkstra()
{int v = 0;int i, k, num, dist[MaxSize];//权值表string path[MaxSize];//路径表for (i = 0; i < vertexNum; i++){dist[i] = arc[v][i];//v-表示当前顶点,i-表示这个顶点与其他顶点的边的权值(希望屏幕前的你能理解)if (dist[i] != INF)//如果连通path[i] = vertex[v] + vertex[i];elsepath[i] = "";}dist[0] = 0;for (num = 1; num < vertexNum; num++)//不知道为什么=1?顶点表已经在集合中了,所以不用遍历{k = Min(dist, vertexNum);cout << path[k] <<' ' << dist[k];for (i = 0; i < vertexNum; i++)//更新最小权值表{if (dist[i] > dist[k] + arc[k][i]){dist[i] = dist[k] + arc[k][i];path[i] = path[k] + vertex[i];}}dist[k] = 0;//将k加入集合,为什么是0?因为0比其他路径权值和都要小所以无法改变}
}int main()
{int n = 0;int e = 0;cin >> n >> e;string p[MaxSize];int i = 0;for (i = 0; i < n; i++){cin >> p[i];}MGraph MG(p, n, e);MG.Dijkstra();return 0;
}

http://www.ppmy.cn/news/56726.html

相关文章

二叉树的遍历及相关衍生

二叉树的遍历及相关衍生 前言二叉树的遍历建树二叉树的遍历遍历的分类代码部分 遍历根的应用打印树中的每个数据代码部分 遍历计算树节点个数代码部分 计算二叉树的深度思路代码部分 第k层个数 结束 前言 如标题所示&#xff0c;在这里我们要研究的是二叉树的遍历。 为什么不…

【ShenYu系列】ShenYu Dubbo插件全流程源码解析

网关启动 在ShenyuConfiguration注入ShenyuWebHandler。 Bean("webHandler")public ShenyuWebHandler shenyuWebHandler(final ObjectProvider<List<ShenyuPlugin>> plugins, final ShenyuConfig config, Lazy final ShenyuLoaderService shenyuLoaderS…

Kestrel封装在Winform中

Kestrel封装在Winform中 背景思路方法1方法2方法3&#xff08;本文使用的方法&#xff09; 实现在winform程序中引入几个nuget包新建一个Startup类&#xff08;叫什么名字都行&#xff09;修改Program文件创建controller 运行效果(打开浏览器&#xff0c;输入如下地址&#xff…

新老stp的配置和安全总结部分

老stp只有根桥没有备份桥 老stp的五种接口状态&#xff1a; disable 接口down没开stp blocking 阻塞 listening 发bpdu&#xff0c;比较bpdu优劣 leraning 开始学习mac地址表 forwardding 转发 老stp直接拓扑变化30秒&#xff0c;间接拓扑变化50秒 RSTP只有3种端口状态&#…

ArduPilot之开源代码LibrarySketches设计

ArduPilot之开源代码Library&Sketches设计 1. 简介1.1 Core libraries1.2 Sensor libraries1.3 Other libraries 2. 源由3. Library Sketches设计3.1 设计框架3.2 Example Sketches3.3 AP_Common Sketches3.3.1 配置sitl环境3.3.2 编译AP_Common3.3.3 运行AP_Common3.3.4 代…

四和能聚分析做直播带货的商家通常发布什么类型的短视频

大家应该都知道&#xff0c;短视频能够为直播间进行预热、引流&#xff0c;短视频做得好&#xff0c;能够积累到大量粉丝&#xff0c;也能够为直播间获取到更多流量&#xff0c;帮助直播间获取到更多流量和转化。做直播带货的商家发布的短视频和以积累粉丝为主的运营者内容上有…

python模块与包

文章目录 模块自定义模块及导入 模块 1.什么是模块? 模块就是一个Python代码文件&#xff0c;内含类、函数、变量等&#xff0c;我们可以导入进行使用。 2.如何导入模块 [from 模块名]import [模块 类变量 函数] [as 别名] 3.注意事项 from可以省略&#xff0c;直接import即可…

【Python入门篇】——PyCharm的基础使用

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…