Dijkstra算法

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#include <iostream>
#include <vector>
using namespace std;
 
struct Line
{
    int Vs;
    int Vt;
};
 
void main()
{
    int i,j,sourse,temp,min,min_node;
    int node = 8;
    int inf = 100;
    int Graph[8][8] =       {0,    2,   1,   8, 100, 100, 100, 100,
                             2,    0, 100,   6,   1, 100, 100, 100,
                             1,  100,   0,   7, 100, 100,   9, 100,
                             8,    6,   7,   0,   5,   1,   2, 100,
                           100,    1, 100,   5,   0,   3, 100,   9,
                           100,  100, 100,   1,   3,   0,   4,   6,
                           100,  100,   9,   2, 100,   4,   0,   3,
                           100,  100, 100, 100,   9,   6,   3,   0 };
    int w[8] = {0};
    int flag[8]  = {0};
    int influence_node[8] = {0};
    for(i = 0; i < node; i ++)
        w[i] = inf;
    vector< Line > line_set;
    cout << "please input the sourse :";
    cin >> sourse;
    Line line_1,line_2;
    line_1.Vs = sourse;
    line_1.Vt = sourse;
    line_set.push_back(line_1);
    w[sourse] = 0;
    flag[sourse] = 1;
    int num = node;
 
    while(num - 1)
    { 
         
        line_1 = line_set.back();
        for(j = 0; j < node; j ++)
        {
            if(flag[j] == 0)
            {
                temp = Graph[line_1.Vt][j] + w[line_1.Vt];
                if(temp < w[j])
                {
                    w[j] = temp;
                    influence_node[j] = line_1.Vt;
                }
            }
        }
        min = 100;
        for(j = 0; j < node; j ++)
        {
            if(flag[j] == 0)
            {
                if(w[j] < min)
                {
                    min = w[j];
                    min_node = j;
                }
            }
        }
        flag[min_node] = 1;
        line_2.Vs = influence_node[min_node];
        line_2.Vt = min_node;
        line_set.push_back(line_2);
        num --;        
    }
    vector< Line >::iterator it;
    for(it = line_set.begin(); it != line_set.end(); it ++)
    {
        cout << it->Vs << " " << it->Vt << endl;
    }
}