迪杰斯特拉算法(Dijkstra算法)

#include<iostream>  
#include<memory.h>
#include<stack>
#include<string>
#include<cmath>
#include<map>
#include<algorithm> 
#include<sstream>
#include<set>
#include<queue>
#include<stdio.h>
using namespace std;
struct node
{
    int num;
    int cost;
    node(int num,int cost):num(num),cost(cost){}

};
int n,m,s,t;
set<int> myset;
int dis[100];
vector<node> v[100]; 
int main()
{
    memset(dis,9999999,sizeof(dis));
     cin>>n>>m;
     for(int i=0;i<m;i++)
     {
        int src,tar,cost;
        cin>>src>>tar>>cost;
        node newnode(tar,cost);
        v[src].push_back(newnode);
     }
     cin>>s>>t;
     myset.insert(s);
     dis[s]=0;
     for(vector<node>::iterator it = v[s].begin();it!=v[s].end();++it)
     {
        dis[it->num]=it->cost;
     }
     while(true)
     {
        int minn=9999999;
        int order;
        for(int i=0;i<n;i++)
        {
            if(dis[i]<minn&&myset.count(i)==0)
            {
                minn=dis[i];
                order=i;
            }
        }
        if(order==t)
        {
            cout<<dis[t];
            break;
        }
        myset.insert(order);
        for(vector<node>::iterator it = v[order].begin();it!=v[order].end();++it)
        {
            if(dis[it->num]>dis[order]+it->cost)
            {
                dis[it->num]=dis[order]+it->cost;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<dis[i]<<" ";
    }
    return 0;
    }

猜你喜欢

转载自blog.csdn.net/wayway0554/article/details/79746222