最短路径算法

最短路径算法

#include
<iostream>

 

void path(){

    //val[i][j]从i点到j点的距离,如果不可到达到,设置成0

    int val[8][8];

    //res[i][j]从i点到j点的最短距离,我们只要得到res[0][7]

    int res[8][8];

    //fa[i]i点的前一个最短距离点

    int fa[8];

    for (int i = 0; i<8; i++) {

        for (int j = 0; j<8; j++){

            val[i][j] = 0;

            res[i][j] = 10000;

        }

        fa[i] = -1;

    }

    res[0][0] = 0;

    val[0][1] = 13;

    val[0][2] = 15;

    val[0][3] = 16;

 

    val[1][4] = 18;

    val[1][5] = 17;

    val[1][6] = 16;

 

    val[2][4] = 18;

    val[2][5] = 20;

    val[2][6] = 30;

    val[3][4] = 11;

    val[3][5] = 9;

    val[3][6] = 13;

 

    val[4][7] = 16;

    val[5][7] = 14;

    val[6][7] = 17;

 

    for (int i = 1; i<8; i++) {

        for (int j = 0; j<i; j++){

            if (val[j][i] != 0) {

                if (res[0][j] +val[j][i]<res[0][i]) {

                    res[0][i] = res[0][j] +val[j][i];

                    fa[i] = j;

                }

            }

        }

    }

    int point = 7;

    std::cout << 7 << "";

    while (fa[point] != -1) {

        std::cout << "<---" << fa[point];

        point = fa[point];

    }

    std::cout << std::endl;

    std::cout << res[0][7] <<std::endl;

}

 

int main(int
argc, const
char * argv[]) {

    // insert code here...

    std::cout << "Hello,World!\n";

    path();

 

    system("pause");

    return 0;

}

运行结果:

时间: 2024-09-20 20:31:09

最短路径算法的相关文章

[算法系列之二十九]Bellman-Ford最短路径算法

单源最短路径 给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边. Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆).但是迪杰斯特拉算法在有负权值边的图中不适用,Bellman-Ford适合这样的图.在网络路由中,该算法会被用作距离向量路由算法. Bellman-Ford也比迪杰斯特拉算法更简单和同时也适用于分布式系统.但Bellman-Ford的时间复杂度是O(VE),这要比迪杰斯特拉算法慢.(V为顶点的个数,E为边的

迷宫的最短路径算法 代码(C++)

题目: 给定一个大小为N*M的迷宫. 迷宫由通道和墙壁组成, 每一步可以向邻接的上下左右四格的通道移动. 请求出从起点到终点所需的最小步数. 请注意, 本题假定从起点一定可以移动到终点. 使用宽度优先搜索算法(DFS), 依次遍历迷宫的四个方向, 当有可以走且未走过的方向时, 移动并且步数加一. 时间复杂度取决于迷宫的状态数, O(4*M*N)=O(M*N). 代码: /* * main.cpp * * Created on: 2014.7.17 *本栏目更多精彩内容:http://www.bi

Floyd求最短路径算法详解

倘若我们要在计算机上建立一个交通咨询系统则可以采用图的结构来表示实际的交通网络.其实现最基本的功能,求出任意两点间的最短路径, 求最短路径的经典方法有很多种,最常用的便是迪杰斯特拉算法和佛洛依德(Floyd)算法,这篇文章就着重介绍Floyd算法. 求两点之间的最短路径无外乎有两种情况,一种就是从一点直接到另一点,另一种就是从一点经过n个节点后再到另一个节点,比如说要从A到B,则有两种情况就是A直接到B,或者是从A经过N个节点后再到B,所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离

python编写的最短路径算法

 本文给大家分享的是python 无向图最短路径算法:请各位大大指教,继续改进.(修改了中文字符串,使py2exe中文没烦恼),需要的朋友可以参考下     一心想学习算法,很少去真正静下心来去研究,前几天趁着周末去了解了最短路径的资料,用python写了一个最短路径算法.算法是基于带权无向图去寻找两个点之间的最短路径,数据存储用邻接矩阵记录.首先画出一幅无向图如下,标出各个节点之间的权值. 其中对应索引: A --> 0 B--> 1 C--> 2 D-->3 E--> 4

【算法导论】每对顶点之间的最短路径算法

        对于一个顶点数为N的有向网路图,我们可以通过前面所提到的单源最短路径算法执行N次来获得每一对顶点间的最短路径.这种方法的时间复杂度为O(N*N*N).如果网络中有负权值的边,则需要使用前面提到的单源最短路径算法之Bellman-Floyd算法.总之,总可以通过单源最短路径来求得每对顶点间的最短路径.这里我就不再用程序实现上述方法,下面介绍Floyd解决这一问题的另一种算法,它形式简单,利于理解,而且时间复杂度同样为O(N*N*N).        Floyd算法是根据给定有向网络

无向图的最短路径算法JAVA实现(转)

一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图.文件内容的格式参考这篇文章第一部分.   二,算法实现思路 无向图的最短路径实现相对于带权的有向图最短路径实现要简单得多. 源点的最短路径距离为0,从源点开始,采用广度优先的顺序,首先将与源点邻接的顶点的路径求出,然后再依次求解图中其他顶点的最短路径. 由于顶点的最短路径的求解顺序 是一个 广度优先

图的遍历、拓扑排序、最短路径算法

1.DFS(深度优先搜索) 深度优先搜索算法(Depth-First-Search),是搜索算法的一种.它沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点.这一过程一直进行到已发现从源节点可达的所有节点为止.如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止.DFS 属于盲目搜索. 深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用

[算法系列之三十]Dijkstra单源最短路径算法

单源最短路径问题 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数.另外,还给定 V 中的一个顶点,称为源.现在我们要计算从源到所有其他各顶点的最短路径长度.这里的长度是指路上各边权之和.这个问题通常称为单源最短路径问题. 前面Bellman-Ford最短路径算法讲了单源最短路径的Bellman-Ford算法(动态规划算法).这里介绍另外一个更常见的算法Dijkstra算法. Dijkstra算法和 最小生成树Prim算法最小生成树算法非常类似,大家可以先熟悉下个算法.两个算法

算法 数据结构 java-以下java的最短路径算法应该如何实现

问题描述 以下java的最短路径算法应该如何实现 不知道怎么用额. 解决方案 http://blog.csdn.net/javaman_chen/article/details/8254309 解决方案二: http://download.csdn.net/detail/gareth_liao/5100648 解决方案三: 谢谢回复 解决方案四: 最短路径算法(java实现)

最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)

一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine-->mine..... 那么,就存在这样一个问题:给定一个单词作为起始单词(相当于图的源点),给定另一个单词作为终点,求从起点单词经过的最少变换(每次变换只会变换一个字符),变成终点单词. 这个问题,其实就是最短路径问题. 由于最短路径问题中,求解源点到终点的最短路径与求解源点到图中所有顶点的最短路径复