全是套路——最短路径(图)

Posted EazyChange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全是套路——最短路径(图)相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cstring>
#include<string>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;

int map[6][6] = {
    999, 999, 999, 999, 999, 999,
    999, 999, 10, 999, 30, 100,
    999, 999, 999, 50, 999, 999,
    999, 999, 999, 999, 999, 10,
    999, 999, 999, 20, 999, 60,
    999, 999, 999, 999, 999, 999,
};
vector<int> res, res1;
int path[10];
void dij()
{
    bool visit[6] = { false };
    int dist[6] = { 999 };

    for (int i = 1; i <= 5; i++)
    {
        dist[i] = map[1][i];
    }
    visit[1] = true;
    path[1] = 1;

    for (int i = 1; i <= 5; i++)
    {
        int min = 777;
        int min_index = 0;
        for (int k = 2; k <= 5; k++)
        {
            if (visit[k] != true && dist[k] <= min)
            {
                min = dist[k];
                min_index = k;
            }
        }
        visit[min_index] = true;
        res.push_back(min_index);
        for (int k = 2; k <= 5; k++)
        {
            if (visit[k] != true && (dist[k] > map[min_index][k] + min))
            {
                dist[k] = map[min_index][k] + min;
                path[k] = min_index;
            }
        }
    }

    int jjj = 0;
}
void showPath(int *path, int v, int v0)   //打印最短路径上的各个顶点 
{
    stack<int> s;
    int u = v;
    while (v != v0)
    {
        s.push(v);
        v = path[v];
    }
    s.push(v);
    while (!s.empty())
    {
        cout << s.top() << " ";
        s.pop();
    }
}
int main()
{
    dij();
    showPath(path, 5, 1);
    


    return 0;
}

 

以上是关于全是套路——最短路径(图)的主要内容,如果未能解决你的问题,请参考以下文章

最短路径问题-Dijkstra(基于图的ADT)

新人教版数学八上 轴对称之最短路径问题——基础知识基本方法思维提升有“套路”

图 - 最短路径 (二)

图--06---加权有向图最短路径Dijstra算法

(王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想代码演示答题规范)

数据结构—— 图:最短路径问题