最短路径算法 地杰斯特拉算法

来源:互联网 发布:微信业务域名 编辑:程序博客网 时间:2024/05/17 07:44
#include <iostream>
#include <stdio.h>
#include <string.h>


using namespace std;


const int N = 1234;
const int INF = 1234567;
int G[N][N];
int dist[N];
int vis[N];
int n,m;


void dij(int v0)
{
    int pos = v0;
    for(int i=1;i<=n;i++)
    {
        dist[i]=G[v0][i];
    }
    vis[pos]=1;
    for(int i=1;i<n;i++)
    {
        int mins=INF;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j] && dist[j] <mins)
            {
                pos=j;
                mins=dist[j];
            }
        }
        vis[pos]=1;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j] && dist[j] > dist[pos]+G[pos][j])
            {
                dist[j]=dist[pos]+G[pos][j];
            }
        }
    }
}


int main()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j)
            {
                G[i][j]=0;
            }
            else
            {
                G[i][j]=INF;
            }
        }
    }
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        scanf("%d %d %d",&u,&v,&w);
        if(w<G[u][v])
        {
            G[u][v]=G[v][u]=w;
        }
    }
    dij(1);
    return 0;
}
0 0
原创粉丝点击