美文网首页C++程序员数据结构和算法分析
C++构造无向图&求最短路径源码

C++构造无向图&求最短路径源码

作者: 小太阳花儿 | 来源:发表于2017-12-14 21:50 被阅读165次

用vector<edge> es[MAX]表示点,每个点队列里放着点的相邻边和到边的距离。

以下源码经过测试可运行
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;

#define MAX 10000 //MAX表示最大节点数
#define INF 10000 //设定两个节点之间不可达的情况下权重为INF

struct edge {
    int to,cost;      //每条边都有一个目的节点和权重
};


vector<edge> es[MAX]; //边的数组元素是以edge为元素的队列

int d[MAX];  //节点i到所有节点的距离
int v,e;  //节点个数和边的个数

//构造图
void build()
{
    printf("please input the number of vertex and edge\n");
    scanf("%d %d",&v,&e);
    printf("please input from,to,and cost of all edges\n");
    for(int i=0;i<e;i++)
    {
        int from,to,cost;
        edge epair1,epair2;
        scanf("%d %d %d",&from,&to,&cost);
        epair1.to=to;
        epair1.cost=cost;
        es[from].push_back(epair1);
        epair2.to=from;
        epair2.cost=cost;
        es[to].push_back(epair2);
    }
}
//求得节点s到所有节点的最短路径
void shortest_path(int s)
{
    for(int i=0;i<v;i++)
    {
        d[i]=INF;
    }
    d[s]=0;
    while(true)
    {
        bool update = false;
            for(int i=0;i<v;i++)
    {
        for(int j=0;j<es[i].size();j++)
        {
            if(d[i]!=INF&&es[i][j].cost+d[i]<d[es[i][j].to])
            {
                d[es[i][j].to]=d[i]+es[i][j].cost;
                update = true;
            }
        }
    }
    if(!update)
    {
        break;
    }
    }

}

int main()
{
    build();
    shortest_path(0);
    for(int i=0;i<v;i++)
    {
        printf("%d ",d[i]);
    }
    return 0;
}

相关文章

  • C++构造无向图&求最短路径源码

    用vector es[MAX]表示点,每个点队列里放着点的相邻边和到边的距离。 以下源码经过测试可运行

  • java最短路径(jgrapht)

    基于jgrapht求最短路径的算法,有向图/无向图,加权图

  • NetworksX 图 使用

    1.有向图 2.无向图 3.节点颜色图 计算:计算1:求无向图的任意两点间的最短路径 结果 计算2:求出有向图中得...

  • 最短路径

    无权图的最短路径用BFS来求 O(|V|+|E|) 有向带权图两点之间的最短路径也包含了路径上其他顶点间的最短路径...

  • 19-最短路径(Shortest Path)

    最短路径(Shortest Path) 最短路径是指两个顶点之间权值之和最小的路径(有向图,无向图均可,不能有负权...

  • 队列Queue--最短路径数

    给定如图所示的无向连通图,假定图中所有边权都为1,显然,从源点A到终点T的最短路径有多条,求不同的最短路径数目。 ...

  • 静态寻路算法Dijkstra(python)

    算法介绍 迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。该...

  • 有向图和最短路径Dijkstra、Bellman-Ford、Fl

    本篇开始讨论关于有向图的算法,无向图是特殊的有向图。内容概要: 有向图的实现 最短路径经典算法实现 有向图的实现 ...

  • 无向图最短路径问题

    题目:无向图G有N个结点(1

  • 《算法》笔记 12 - 最短路径

    加权有向图 数据结构加权有向边加权有向图最短路径 边的松弛 Dijkstra算法 地图或者导航系统是最短路径的典型...

网友评论

    本文标题:C++构造无向图&求最短路径源码

    本文链接:https://www.haomeiwen.com/subject/mdmlwxtx.html