`
pleasetojava
  • 浏览: 705374 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

每对顶点间的最短路径C++实现

 
阅读更多

// 每对顶点间的最短路径.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#define MAX 100
#define Infinity 65535
using namespace std;

//

int L1[MAX][MAX];
int L2[MAX][MAX];
//用来存储边的权值,即有向图的邻接矩阵
int w[MAX][MAX];

//初始化,把w[i][j]赋给L1[i][j]
void initialise(int n)
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
L1[i][j] = w[i][j];
}
//求每一对顶点间暂时最短距离
void extend_shortest_paths(int n)
{
int i,j,k,l;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
L2[i][j] = Infinity;
for(k=1;k<=n;k++)
L2[i][j] = L2[i][j]<(L1[i][k]+w[k][j])?L2[i][j]:(L1[i][k]+w[k][j]);
}
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
L1[i][j] = L2[i][j];
}

//求所有对顶点之间的最短距离
void show_all_pairs_shortest_paths(int n)
{
initialise(n);
int m;
for(m=2;m<=n-1;m++)
extend_shortest_paths(n);
}
int _tmain(int argc, _TCHAR* argv[])
{
int cases;
cout<<"请输入案例的个数:"<<endl;
cin>>cases;
while(cases--)
{
cout<<"请输入顶点个数:"<<endl;
int n;
cin>>n;
cout<<"请输入邻接矩阵(n*n)(如果二点之间没有有向线段,输入65535):"<<endl;
int i,j;
//二点之间没有有向线段,输入65535
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cin>>w[i][j];
}
show_all_pairs_shortest_paths(n);
cout<<"输出每一对顶点间的最短距离:"<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"顶点"<<i<<"到顶点"<<j<<"的最短距离为:"<<L1[i][j]<<endl;
}
}
system("pause");
return 0;
}

-----------------------------------------------------程序测试----------------------------------------------------------

请输入案例的个数:
1
请输入顶点个数:
5
请输入邻接矩阵(n*n)(如果二点之间没有有向线段,输入65535):
0 3 8 65535 -4
65535 0 65535 1 7
65535 4 0 65535 65535
2 65535 -5 0 65535
65535 65535 65535 6 0
输出每一对顶点间的最短距离:
顶点1到顶点1的最短距离为:0
顶点1到顶点2的最短距离为:1
顶点1到顶点3的最短距离为:-3
顶点1到顶点4的最短距离为:2
顶点1到顶点5的最短距离为:-4
顶点2到顶点1的最短距离为:3
顶点2到顶点2的最短距离为:0
顶点2到顶点3的最短距离为:-4
顶点2到顶点4的最短距离为:1
顶点2到顶点5的最短距离为:-1
顶点3到顶点1的最短距离为:7
顶点3到顶点2的最短距离为:4
顶点3到顶点3的最短距离为:0
顶点3到顶点4的最短距离为:5
顶点3到顶点5的最短距离为:3
顶点4到顶点1的最短距离为:2
顶点4到顶点2的最短距离为:-1
顶点4到顶点3的最短距离为:-5
顶点4到顶点4的最短距离为:0
顶点4到顶点5的最短距离为:-2
顶点5到顶点1的最短距离为:8
顶点5到顶点2的最短距离为:5
顶点5到顶点3的最短距离为:1
顶点5到顶点4的最短距离为:6
顶点5到顶点5的最短距离为:0
请按任意键继续. . .

分享到:
评论

相关推荐

    Floyd最短路径算法C++实现

    Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。采用C++实现

    利用Dijkstra算法来求解顶点之间最短路径

    利用Dijkstra算法来求解顶点之间最短路径

    加权图中顶点间最短路径的算法

    加权图中顶点间最短路径的算法,使用C++实现Floyd算法,对正在学习算法的同学应该挺有帮助的

    任意两个顶点之间的最短路径_Floyd算法_C语言

    Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。

    图论 弗洛依德算法 最短路径 程序

    //*PROGRAM :最短路径 * //*CONTENT :弗洛依德算法 * //* * * * * * * * * * * * * * * * * * * * * * * * #include #include #include #include #include #define INFINITY 10000 //定义权值的最大值 #define...

    C++课程设计最短路径

    C++课程设计最短路径,包括:单源最短路径、单目标最短路径、单顶点对间最短路径、所有顶点对间最短路径

    最短路径 Dijkstra算法C语言实现

    本设计以VC++6.0作为程序开发环境,C语言作为程序开发语言,详细介绍了最短路径的求解算法及其...请用C/C++语言的结构体、指针、数据结构等基础知识,编写程序实现图的结构定义、图的存储,以及求解单源点最短路径。

    C语言实现图的最短路径Floyd算法

    Floyd算法直接使用二维数组求出所有顶点到所有顶点的最短路径。 D代表顶点到顶点的最短路径权值和的矩阵。 P代表对应顶点的最小路径的前驱矩阵。 以下程序在DEV C++中调试运行通过。 #include &lt;stdio&gt; #define ...

    最短路径课程设计 C++

    Dijkstra算法 Dijkstra算法的思路是:设有向图G=(V,E),其中,V={v0,v1,…,vn-1},cost[i][j]表示有向边,vj&gt;的权值。若不存在有向边,vj&gt;,则cost[i][j]的权为...按此方法,可以同时求得各对顶点间的对段距离。

    C++ 带权有向图 最短路径及长度

    C++程序,它能根据读入的带权有向图G的数据,构造并输出图G的顶点Vi到其它每个顶点的最短路径及长度,最后输出图G的拓扑序列。图的输入形式为n i i0 j0 w0 i1 j1 w1 i2 j2 w2 ...im jm wm -1 -1 -1(-1 -1 -1为...

    基于Dijkstra算法的最短路径实现与应用

    我们先阐述Dijkstra算法的原理,在算法设计中,分别用邻接矩阵和邻接表存储带权有向图,并编写C++语言实现Dijkstra算法最短路径,用户只需输入要处理的有向图中包含段的个数和弧头与弧尾的顶点以及该弧上所附带的...

    C++求所有顶点之间的最短路径(用Dijkstra算法)

    本文实例为大家分享了C++求所有顶点之间最短路径的具体代码,供大家参考,具体内容如下 一、思路: 不能出现负权值的边 (1)轮流以每一个顶点为源点,重复执行Dijkstra算法n次,就可以求得每一对顶点之间的最短...

    校园最短路径问题的研究与实现

    本课程设计主要解决求的校园任意地点间最短路径的问题。在本程序中,对于任意一个起点,如果不确定具体的终点,则以表格形式输出从起点到...同时还能实现对校园路径图的修改功能,如顶点以及边的增删、边上权值的修改等。

    Floyd算法求任意两点间的最短路径

    用C++ 语言编写 用Floyd算法求有向图中任意两点间的最短路径 由用户输入顶点和有向边的信息

    广度遍历求最短路径

    存储结构:邻接表; 实现功能:广度遍历求最短路径; 博客中的代码实现

    求单源最短路径的C++语言程序

    求单源最短路径的算法,比较简洁实用。 typedef struct { int adjList[max][max]; //各顶点间边的长度 char v[max]; //图的顶点信息 int vexnum; //图的顶点数量 }graph;

    C++多段图的最短路径

    C++多段图的最短路径程序实现 #include #define INFINITY 32767 #define MAX 20 typedef struct { char vexs[MAX]; //顶点信息 int vexnum,arcnum; int arcs[MAX][MAX]; }Graph;//图的结构体

    c++数据结构课程设计-校园最短路径(采用Dijkstra算法)【包含课设文档】

    采用Dijkstra算法,实现校园最短路径,资源包内包含源代码和文档说明~ 功能: (1) 输出顶点信息:将校园内各位置输出。 (2)输出边的信息:将校园内每两个位置(若两个位置之间有边)的距离输出。 (3) 修改:修改两...

    深度优先求无向图中顶点a到顶点i的最短路径

    void Minway()//输出最短路径 { int min=10000; for(int i=0;i();i++) if(all[i]) min=all[i]; for(int j=0;j();j++) if(all[j]==min) cout最短路径: "[j]长度:"[j]; cout; }

    求单源最短路径(算法分析中)c++

    单源最短路径 算法分析中 求单源最短路径

Global site tag (gtag.js) - Google Analytics