#include<stdio.h>
#include<string.h>
#define INF 32767
#define MAXVEX 30
int dist[MAXVEX];        //建立dist数组int path[MAXVEX];         //建立path数组int S[MAXVEX];        //建立S数组typedef char VertexType;typedef struct graph
{int n,e;VertexType vexs[MAXVEX];int edges[MAXVEX][MAXVEX];
}MGraph;void CreateMGraph(MGraph &G)
{int n,e;int value;char temp_i;char temp_j;printf("请输入图的顶点数和边数(以空格分隔):");scanf("%d%d",&n,&e);G.n=n;G.e=e;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(i==j)G.edges[i][j]=0;elseG.edges[i][j]=32767;}}printf("输入顶点信息:");for(int j=0;j<G.n;j++){getchar();scanf("%c",&G.vexs[j]);}int temp_number_i;int temp_number_j;printf("请输入每条边的权值:\n");for(int j=0;j<e;j++){getchar();scanf("%c %c %d",&temp_i,&temp_j,&value);for(int i=0;i<n;i++){if(G.vexs[i]==temp_i)temp_number_i=i;if(G.vexs[i]==temp_j)temp_number_j=i;}G.edges[temp_number_i][temp_number_j]=value;}}void DispMGraph(MGraph &G)
{printf("输出顶点信息:\n");for(int i=0;i<G.n;i++){printf("%c",G.vexs[i]);} printf("\n输出邻接矩阵:\n");printf("\t");for(int i=0;i<G.n;i++)printf("%8c",G.vexs[i]); for(int i=0;i<G.n;i++){printf("\n%8c",G.vexs[i]);for(int j=0;j<G.n;j++){if(G.edges[i][j]==32767) //两点之间无连接时权值为默认的32767,// 在无向图中一般用"0"表示,在有向图中一般用"∞",// 这里为了方便统一输出 "∞"printf("%8s", "∞");elseprintf("%8d",G.edges[i][j]);}printf("\n");}
}void Dijkstra(MGraph g, int v)
{  //求从v到其他顶点的最短路径int mindis,i,j,u=0;for (i=0;i<g.n;i++){    dist[i]=g.edges[v][i]; //距离初始化S[i]=0;          //S[]置空if (g.edges[v][i]<INF) //路径初始化path[i]=v;         //v→i有边时,置i前一顶点为velse            //v→i没边时,置i前一顶点为-1path[i]=-1;}S[v]=1;         //源点编号v放入S中for (i=0;i<g.n-1;i++)  //循环向S中添加n-1个顶点{  mindis=INF;      //mindis置最小长度初值for (j=0;j<g.n;j++)    //选取不在S中且有最小距离顶点uif (S[j]==0 && dist[j]<mindis) {  u=j;mindis=dist[j];}S[u]=1;          //顶点u加入S中for (j=0;j<g.n;j++)  //修改不在s中的顶点的距离if (S[j]==0)if (g.edges[u][j]<INF&& dist[u]+g.edges[u][j]<dist[j]){  dist[j]=dist[u]+g.edges[u][j];path[j]=u;}}
}void Print(MGraph G,int v)
{printf("\n");for(int i=0;i<G.n;i++){if(i!=v && dist[i]!=INF){printf("%c到%c的最短距离为:%d\n",G.vexs[v],G.vexs[i],dist[i]);}else if(dist[i]==INF){printf("%c与%c之间无路径!\n",G.vexs[v],G.vexs[i]); } }printf("\n");
}/*------------------输出从顶点v出发的所有最短路径-------------------*/
static void Dispath(MGraph g, int v)
{int i, j, k;int apath[MAXVEX], d;                         //存放一条最短路径(逆向)及其顶点个数//循环输出从顶点v到i的路径for(i = 0; i < g.n; i++){if(S[i] == 1 && i != v){printf("从顶点%c到顶点%c的路径长度为:%d\t路径为:", g.vexs[v], g.vexs[i], dist[i]);d = 0; apath[d] = i;                //添加路径上的终点k = path[i];if(k == -1)                         //没有路径的情况printf("无路径\n");else                                //存在路径时输出该路径{while(k != v){d++;apath[d] = k;k = path[k];}d++; apath[d] = v;              //添加路径上的起点printf("%c ",  g.vexs[apath[d]]);         //先输出起点for(j = d - 1; j >= 0; j--)     //再输出其余顶点printf("  %c ", g.vexs[apath[j]]);printf("\n");}}}
}
static void Dispath2(MGraph g, int v,int w)
{int i, j, k;int apath[MAXVEX], d;                         //存放一条最短路径(逆向)及其顶点个数//循环输出从顶点v到i的路径for(i = 0; i < g.n; i++){if(S[i] == 1 && i != v&&i==w){printf("%d\n",dist[i]);d = 0; apath[d] = i;                //添加路径上的终点k = path[i];if(k == -1)                         //没有路径的情况printf("无路径\n");else                                //存在路径时输出该路径{while(k != v){d++;apath[d] = k;k = path[k];}d++; apath[d] = v;                //添加路径上的起点printf("%c ",  g.vexs[apath[d]]);         //先输出起点for(j = d - 1; j >= 0; j--)     //再输出其余顶点printf("  %c ", g.vexs[apath[j]]);printf("\n");}}}
}void min_shortest_path(MGraph G,int v)
{int mindist=dist[0];int temp;for(int i=1;i<G.n;i++){if(mindist<dist[i]){mindist=dist[i];temp=i;}}printf("图中距离顶点%c最短路径长度中最大的为:",G.vexs[v]);Dispath2(G, v,temp);}
int main()
{MGraph G;CreateMGraph(G);DispMGraph(G);Dijkstra(G,0);Print(G,0);Dispath(G,0);min_shortest_path(G,0);
}

数据结构——图-最短路径长度中最大的一个相关推荐

  1. 翻译Deep Learning and the Game of Go(10)第七章:从数据中学习:一个深度学习AI

    本章包括 下载和处理实际的围棋游戏记录 了解存储围棋游戏的标准格式 训练一个使用这样的数据进行落子预测的深度学习模型 运行自己的实验并评估它们 在前一章中,您看到了构建深度学习应用程序的许多基本要素, ...

  2. 【算法】广度遍历算法的应用 求出距离顶点v0的最短路径长度为最长的一个顶点,图结构的bfs生成树及其双亲表示形式

    例: 求出距离顶点v0的最短路径长度为最长的一个顶点,并要求尽可能节省时间 分析: 用bfs算法(利用bfs算法的层次特性): 从v0出发进行广度遍历时, 最后一层的顶点距离v0的最短路径长度最长.因 ...

  3. 动态规划——矩阵中的最短路径长度

    文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 题目 假设我们有一个 n 乘以 n 的矩阵 w[n][n].矩阵存储的都是正整数.棋子起始位置在左上角, ...

  4. 数据结构—图及其应用(交通问题,实现最短路径、最短时间、最少费用查询)

    数据结构-图及其应用(交通问题,实现最短路径.最短时间.最少费用查询) 1.任务描述 (1).任务: 设计一个城市交通咨询模拟系统,利用该系统实现至少两种最优决策:最短路程到达.最省时到达等线路规划. ...

  5. 数据结构 图(一)丛林中的路

    数据结构(十三) 学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流. -- 丛林中的路 -- 1.题目描述 热带岛屿Lagrishan的首领现在面临一个问题 ...

  6. 数据结构---图的表示:如何存储微博、微信等社交网络中的好友关系?

    如何理解"图" (graph) 先来了解一下图的几个概念: 顶点(vertex).边(edge).度(degree).有向图.无向图.入度(in-degree).出度(out-de ...

  7. R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字

    R语言使用gt包和gtExtras包优雅地.漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解.使用gtExtras包添加一个图,显示表中某一列中的数字 目录

  8. R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE

    R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型预测中系统误差的一个例子 .自定义函数计算R方指标和均方根误差RMSE 目 ...

  9. R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字、并为类型数据添加图像符号标签

    R语言使用gt包和gtExtras包优雅地.漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解.使用gtExtras包添加一个图,显示表中某一列中的数字.并为类型数据添加图像符号标签 目 ...

最新文章

  1. /etc/rsyncd.conf
  2. vba 单元格 一系例操作
  3. h1、h2、h3标签及strong标签对页面seo的影响
  4. [css] 重置(初始化)css的作用是什么?
  5. cmd如何默认以管理身份运行
  6. c语言运行VBA,C语言选择题部分模块和VBA.ppt
  7. Postgresql 截取字符串
  8. DataTable转Csv,Excel(转)
  9. android布局layout中的一些属性
  10. 黑科技!颠覆者!区块链,再不关注就晚了
  11. bootstrap基础样式学习(二)——栅格
  12. Java面向对象的继承
  13. 计算机桌面文件如何发送给qq好友,怎么把电脑里的文件夹发给qq好友
  14. 用阿里网盘有一段时间了,说说总体感受吧
  15. gossiping路由协议仿真
  16. apex 查询_在 Apex 中使用合并统计查询
  17. 乐博机器人Arduino周五班级,入门课程,碰撞开关控制灯闪烁
  18. 超详细“CIDR地址块及其子网划分”
  19. linux相关图形与相关命令
  20. 数据库事物和分布式事物

热门文章

  1. 微软开放Holographic平台,意在统一VR的操作系统?
  2. [转]Xshell连接win10 Linux子系统
  3. ArcGIS实验教程——实验一:ArcGIS软件的认识与使用
  4. linux c之通过popen执行shell命令
  5. C和指针之联合体大小
  6. C++类和new、delete操作符和堆和栈内存的分配
  7. Android之可以做的两件坏事---破解锁屏密码和获取Wifi密码
  8. node中间件mysql_nodejs 中使用mysql数据有没有类似 mongoose 的中间件?
  9. python带通配符的字符串匹配_Bash技巧:实例介绍数个参数扩展表达式以处理字符串变量...
  10. 微信又添新功能!这个微信群可以学英语,而且全程免费