EazyChange

导航

 
#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;
}

 

posted on 2016-08-26 19:13  EazyChange  阅读(247)  评论(0编辑  收藏  举报