DS图—图的最短路径(不含代码框架)
题目描述
给出一个图的邻接矩阵,输入顶点v,用迪杰斯特拉算法求顶点v到其它顶点的最短路径。
输入
第一行输入t,表示有t个测试实例
第二行输入顶点数n和n个顶点信息
第三行起,每行输入邻接矩阵的一行,以此类推输入n行
第i个结点与其它结点如果相连则为距离,无连接则为0,数据之间用空格
隔开。第四行输入v0,表示求v0到其他顶点的最短路径距离
以此类推输入下一个示例
输出
对每组测试数据,输出:
每行输出v0到某个顶点的最短距离和最短路径
每行格式:v0编号-其他顶点编号-最短路径值----[最短路径]。没有路径输出:v0编号-其他顶点编号--1。具体请参考示范数据
样例输入
2
5 0 1 2 3 4
0 5 0 7 15
0 0 5 0 0
0 0 0 0 1
0 0 2 0 0
0 0 0 0 0
0
6 V0 V1 V2 V3 V4 V5
0 0 10 0 30 100
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 0 0 0 0 0
V0
样例输出
0-1-5----[0 1 ]
0-2-9----[0 3 2 ]
0-3-7----[0 3 ]
0-4-10----[0 3 2 4 ]
V0-V1--1
V0-V2-10----[V0 V2 ]
V0-V3-50----[V0 V4 V3 ]
V0-V4-30----[V0 V4 ]
V0-V5-60----[V0 V4 V3 V5 ]
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=100,INF=0x3f3f3f3f;
int t;
map<string,int> mp;
map<int,string> ins;class GRAPH{
public:int n,w[maxn][maxn],dist[maxn],st;bool vis[maxn];string path[maxn];GRAPH(){cin>>n;for(int i=0;i<n;i++){string x;cin>>x;mp[x]=i;ins[i]=x;}for(int i=0;i<n;i++){vis[i]=false;dist[i]=INF;for(int j=0;j<n;j++){cin>>w[i][j];}}}void getpath(){string start;cin>>start;st=mp[start];dist[st]=0;for(int i=0;i<n;i++){path[i]+=ins[st]+" ";if(i!=st && w[st][i]){path[i]+=ins[i]+" ";dist[i]=w[st][i];}}vis[st]=true;for(int k=0;k<n-1;k++){int res,dis=INF;for(int i=0;i<n;i++){if(!vis[i] && dis>dist[i]){res=i;dis=dist[i];}}for(int i=0;i<n;i++){if(!vis[i] && dist[i]>dist[res]+w[res][i] && w[res][i]){dist[i]=dist[res]+w[res][i];path[i]=path[res];path[i]+=ins[i]+" ";}}vis[res]=true;}}void display(){for(int i=0;i<n;i++){if(i==st) continue;if(dist[i]==INF){dist[i]=-1;cout<<ins[st]<<"-"<<ins[i]<<"-"<<dist[i]<<endl;}else cout<<ins[st]<<"-"<<ins[i]<<"-"<<dist[i]<<"----["<<path[i]<<"]\n";}}
};int main(){cin>>t;while(t--){GRAPH g;g.getpath();g.display();}return 0;
}
DS图—图的最短路径(不含代码框架)相关推荐
- DS二叉树——Huffman编码与解码(不含代码框架)
题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...
- 【id:180】【20分】D. DS二叉树--赫夫曼树解码(不含代码框架)
题目描述 已知赫夫曼编码算法和程序,在此基础上进行赫夫曼解码 在赫夫曼树的类定义中增加了一个公有方法: int Decode(const string codestr, char txtstr[]) ...
- 【id:179】【20分】C. DS二叉树--赫夫曼树的构建与编码(不含代码框架)
题目描述 给定n个权值,根据这些权值构造huffman树,并进行huffman编码 参考课本P147算法6.12 HuffmanCoding代码,注意数组访问是从位置1开始 要求:赫夫曼的构建中,默认 ...
- ASoC Platform驱动代码框架图
原址 [前言] 在更深入地阅读了工程中 Audio 部分的驱动代码之后,整理出了一个 ASoC Platform 驱动代码的框架图.类似的 ASoC Machine驱动代码框架图在<ASoC M ...
- ASoC Machine驱动代码框架图
原址 [前言] 较久之前写了一篇<Linux ASoC音频驱动架构 及 Machine驱动代码分析>,那个时候刚开始接触 ALSA,文章写得很粗糙.这段时间以来新看了 HAL层.Frame ...
- ASoC Codec驱动代码框架图
原址 [前言] 上个月写了<Audio驱动开发 之 Codec芯片ALC5677驱动代码分析>,但是感觉那个时候理解得还不够深入.写得很粗糙.这一个月以来新看了 HAL层.Framewor ...
- 动图图解C语言插入排序算法,含代码分析
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- 动图图解C语言选择排序算法,含代码分析
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- 数据结构—图(Part Ⅱ)—最小生成树 最短路径
目录 最小生成树 普里姆(Prim)算法 算法实现 运行结果 程序分析 克鲁斯卡尔(Kruskal)算法 算法实现 运行结果 程序分析 最短路径 广度优先搜索(BFS)算法 算法实现 运行结果 程序分 ...
最新文章
- 动态规划:求最大公共子串
- python中矩阵与向量的区别
- 我用python是什么梗_Python中的一些梗
- 5、优化MySQL服务器
- 第三次学JAVA再学不好就吃翔(part31)--super关键字
- scrapy 让指定的spider执行指定的pipeline
- 批处理命令Start
- Python3中异常处理和try/except,try/finally的用法
- 基于JAVA+Servlet+JSP+MYSQL的图书馆座位预约系统
- win11退回win10一直黑屏转圈怎么办 win11退回win10黑屏转圈的解决方法
- 图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积
- C语言程序员面试100题,c语言面试最必考的十道试题,求职必看!!!
- 文献检索是利用计算机对文献,文献检索计算机课.ppt
- 【愚公系列】2022年10月 .Net Core使用cpolar内网穿透功能实现钉钉回调事件的监听
- 不同网络下 一台电脑连接另一台电脑的mysql数据库
- 我在阿里做数据分析师,一位阿里数据分析师的日常
- turtle画樱花树林
- 15条中国人不熟悉的投资理念
- 字符串(1) : 首字母转大写/小写
- Toolbar添加菜单栏Menu