任务描述
本关任务:编程实现求图的最短路径
相关知识
最短路径的Dijkstra算法:
求最短路径就是求图中的每一个点到图中某一个给定点(认为编号为0的点)的最短距离。
具体算法就是初始有一个旧图,一个新图。开始时旧图中有所有的结点,新图中初始为只有一个结点(源点,路径的源头)。整个算法就是不停的从旧图中往新图中添加点,直到所有的点都添加到新图中为止。
编程要求
根据提示,在右侧编辑器补充代码,计算并输出图的最短路径
测试说明
平台会对你编写的代码进行测试:
测试输入:按照指导书上图的数据进行输入
预期输出:
(1^5) (2^3) (4^2)
(2^2) (3^6)
(1^1) (3^2)
(1^6) (2^10) (3^4)
0@0,1@4,2@3,3@5,4@2


#include <stdio.h>
#include <stdlib.h>char infomation[20];
//输入图
//1 5 2 3 4 2:
//3 6 2 2:
//3 2 1 1:
//:
//1 6 2 10 3 4:typedef struct{int length;//最短路径长度int prevex;//从V0到Vi的最短路径上Vi的前驱节点
}Path;Path *dist;int main(int argc, const char * argv[]) {int number = 5;int arcs[5][5]={{0,5,3,65535,2},{65535,0,2,6,65535},{65535,1,0,2,65535},{65535,65535,65535,0,65535},{65535,6,10,4,0}};dist = (Path*)malloc(sizeof(Path)*number);for(int i=0;i<number;i++){for(int j=0;j<number;j++){if(arcs[i][j]!=0&&arcs[i][j]!=65535){printf("(%d^%d)",j,arcs[i][j]);if(i==0&&j==4)printf(" ");for(int k=j+1;k<number;k++)if(arcs[i][k]!=0&&arcs[i][k]!=65535){printf(" ");break;}}}printf("\n");}//初始化指定顶点V0到V-U中各顶点的距离int i;dist[0].length=0;dist[0].prevex=0;arcs[0][0] = 1;for(i=1;i<number;i++){dist[i].length = arcs[0][i];if(dist[i].length!=65535)dist[i].prevex = 0;else dist[i].prevex = -1;}int j,mv;int min;for(i=1;i<number;++i){min = 65535;mv=0;for(j=1;j<number;++j)if(arcs[j][j]==0&&dist[j].length<min){mv = j;min=dist[j].length;}if(mv==0)break;arcs[mv][mv]=1;for(j=1;j<number;j++){if(arcs[j][j]==0&&dist[j].length>dist[mv].length+arcs[mv][j]){dist[j].prevex = mv;dist[j].length = dist[mv].length + arcs[mv][j];}}}for(i = 0;i<number-1;i++)printf("%d@%d,",i,dist[i].length);printf("%d@%d",i,dist[i].length);return 0;
}

如果是写实验报告,可以用下面的代码

#include <stdio.h>
#include <stdlib.h>char infomation[20];
//输入数据 5
//1 5 2 3 4 2:
//3 6 2 2:
//3 2 1 1:
//:
//1 6 2 10 3 4:typedef struct{int length;//最短路径长度int prevex;//从V0到Vi的最短路径上Vi的前驱节点
}Path;Path *dist;int main(int argc, const char * argv[]) {int number;printf("Enter a network. The minimal weights of paths from vertex 0 to other vertices\n");printf("How many vertices in the digraph (between 1 and 10)?");scanf("%d",&number);int arcs[number][number];dist = (Path*)malloc(sizeof(Path)*number);for(int i = 0;i<number;i++)for (int j=0; j<number ; j++)arcs[i][j]=0;printf("For each vertex, give the vertices to which it points.\nand the corresponding directed edge weight.\nType the pairs of numbers (terminated by a : for each vertex), separated by blanks.\n");for(int i=0;i<number;i++){printf("Vertex %d : ",i);fflush(stdin);fgets(infomation,20,stdin);int flag = 0;char temp='0';for(int j = 0;j<20;j++){if(infomation[j]==' ')continue;else if(infomation[j]==':')break;if(flag==0){temp = infomation[j];flag = 1;}else if(flag==1){arcs[i][temp-'0'] = infomation[j]-'0';if(infomation[j+1]!=' '&&infomation[j+1]!=':'){arcs[i][temp-'0']*=10;flag=3;continue;}flag=0;}else if(flag==3){flag=0;continue;}}for(int j = 0;j<20;j++) infomation[j] = '0';}for(int i = 0;i<number;i++){for (int j=0; j<number ; j++)if(i==j)arcs[i][j]=0;else if(arcs[i][j]==0)arcs[i][j]=65535;}printf("\nYou entered the graph:\n\n");for(int i=0;i<number;i++){printf("Vertex %d : ",i);for(int j=0;j<number;j++){if(arcs[i][j]!=0&&arcs[i][j]!=65535){printf("<%d^%d> ",j,arcs[i][j]);}}printf("\n");}//初始化指定顶点V0到V-U中各顶点的距离int i;dist[0].length=0;dist[0].prevex=0;arcs[0][0] = 1;for(i=1;i<number;i++){dist[i].length = arcs[0][i];if(dist[i].length!=65535)dist[i].prevex = 0;else dist[i].prevex = -1;}int j,mv;int min;for(i=1;i<number;++i){min = 65535;mv=0;for(j=1;j<number;++j)if(arcs[j][j]==0&&dist[j].length<min){mv = j;min=dist[j].length;}if(mv==0)break;arcs[mv][mv]=1;for(j=1;j<number;j++){if(arcs[j][j]==0&&dist[j].length>dist[mv].length+arcs[mv][j]){dist[j].prevex = mv;dist[j].length = dist[mv].length + arcs[mv][j];}}}printf("The minimal distances from vertex O to the other vertices are as follows:\n");for(i = 0;i<number;i++)printf("%d@%d, ",i,dist[i].length);printf("\n");return 0;
}

不得不说,学校出的头歌题目和实验报告都有点问题,已经向老师反馈了

数据结构实验头歌 第1关:求图的最短路径相关推荐

  1. Floyd是咋求图的最短路径?

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 作者丨大赛 来源丨bigsai 前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Flo ...

  2. python头歌第1关:评委打分

    任务描述 本关任务:编写一个评委打分. 相关知识 为了完成本关任务,你需要掌握:1.文件打开,2.文件读取,3.文件关闭. 编程要求 文件score.txt中存储了歌手大奖赛中10名评委给每个歌手打的 ...

  3. E - 数据结构实验之排序五:归并求逆序数

    Description 对于数列a1,a2,a3-中的任意两个数ai,aj (i < j),如果ai > aj,那么我们就说这两个数构成了一个逆序对:在一个数列中逆序对的总数称之为逆序数, ...

  4. 数据结构实验之排序五:归并求逆序数

    题目描述 对于数列a1,a2,a3-中的任意两个数ai,aj (i < j),如果ai > aj,那么我们就说这两个数构成了一个逆序对:在一个数列中逆序对的总数称之为逆序数,如数列 1 6 ...

  5. 数据结构实验之图论十:判断给定图是否存在合法拓扑序列

    Description 给定一个有向图,判断该有向图是否存在一个合法的拓扑序列. Input 输入包含多组,每组格式如下. 第一行包含两个整数n,m,分别代表该有向图的顶点数和边数.(n<=10 ...

  6. 迪杰斯特拉算法求经纬度坐标的最短路径_【图的最短路径】迪杰斯特拉算法求图的最短路径...

    #include using namespace std; const int INFINITY=23678; const int M=3; /*typedef struct G { int ver[ ...

  7. 漫画:如何求图的最短路径? | 技术头条

    作者 | 程序员小灰 本文经授权转载自程序员小灰(ID:chengxuyuanxiaohui) -----  第二天  ----- 小灰的思路如下: 第一步,利用迪杰斯特拉算法的距离表,求出从顶点A出 ...

  8. 弗洛伊德(Floyd)算法求图的最短路径

    弗洛伊德基本思想 弗洛伊德算法作为求最短路径的经典算法,其算法实现相比迪杰斯特拉等算法是非常优雅的,可读性和理解都非常好. 基本思想: 弗洛伊德算法定义了两个二维矩阵: 矩阵D记录顶点间的最小路径 例 ...

  9. 请用c语言编程求图的最短路径,最短路径-交通图-c语言实现

    #include #include #include typedef struct ArcCell { int adj;                //相邻接 }ArcCell; typedef ...

最新文章

  1. Thinkphp怎样修改模板标签定界符
  2. 011 数据结构逆向—二叉树
  3. ARM GIC简介与Linux中断处理分析
  4. wxWidgets:日期和时间
  5. java1121123211234321_使用for 语句打印显示下列数字形式:n=4 1 1 2 1 1 2 ,使用for 语句打印显示下列数字形式:n=4...
  6. 信息学奥赛C++语言:顺序输出
  7. 稀缺生物科技美妆海报PSD分层模板,看得见的超前感!
  8. 经常听到一些老板说,你来公司上班就只是为了赚钱吗?
  9. 第五章 Spring3.0 、Hibernate3.3与Struts2的整合 基于Annotation
  10. CentOS搭建全功能服务器(Nginx+Tomcat+PHP+SSL)
  11. loading怎么关闭 vant_Vant Loading 加载
  12. 见贤思齐,正式开启源码之旅
  13. 通过软考高项的艰辛历程
  14. java blog 引擎_推荐10个Java开源CMS系统
  15. javafx 菜单组件_基础6:新菜单组件
  16. Contradiction Detection with Contradiction-Specific Word Embedding
  17. 对一些时间处理的总结
  18. 用百度搜索sb,第一个结果是??
  19. marquee 的浏览器兼容性
  20. c语言 百度文库,百度文库C语言专本辅导第一二章.doc

热门文章

  1. 深圳市威视爱普手术示教系统
  2. 微信小程序video默认不播放且显示视频第一帧
  3. matlab MinGW-w64 C/C++ Compiler 的配置(附百度云下载资源)
  4. android 指纹 分发,移动终端及基于指纹识别来实现操作的方法和系统与流程
  5. 网络基础知识:10M、50M、100M宽带下载速率一般是多少?—Vecloud微云
  6. 【附源码】Python计算机毕业设计农田节水灌溉监测系统
  7. 区块链技术及其在信息安全领域的研究进展 简单概括
  8. IDEA做数据库操作时的一个莫名其妙的错误
  9. 青龙面板+傻妞sillyGirl+阿东自动登录全套保姆级一步到位教程(2021-10-09)
  10. 解决IEEE会议模板引用bib文件时出现Bibliography not compatible with author-year citations