Dijkstra

来源:互联网 发布:蛇精脸拍照软件 编辑:程序博客网 时间:2024/05/16 12:57
#include<iostream>
#include<cstring>
using namespace std;

const int INF=99999999;
const int MAX=205;

int map[MAX][MAX];
int dis[MAX];
int vis[MAX];
int m,n;

void Init(){  
    int i,j;
    int u,v,w;
    for(i=0; i<=n; i++){
        for(j=0; j<=n; j++)
            map[i][j] = INF;
        map[i][i] = 0;
    }
    memset(vis,0,sizeof(vis));
    for(i=1; i<=m; i++){
       cin>>u>>v>>w;
       if(w < map[u][v])
           map[u][v] = map[v][u] = w;
    }
}

void Dijkstra(int u){
    int i,j;
    int now,min;
    for(i=0; i<n; i++){
        dis[i] = map[u][i];
    }
    vis[u] = 1;
    for(i=1; i<n; i++){
        min=INF;
        for(j=0; j<n; j++){
            if(!vis[j] && dis[j]<min){
                min = dis[j];
                now = j;
            }
        }
        vis[now] = 1;
        for(j=0; j<=n; j++)
            if(!vis[j] && dis[now]+map[now][j]<dis[j]){
                dis[j] = dis[now]+map[now][j];
            }
    }
    cout<<dis[n-1]<<endl;
}

int main(){
    while( cin>>n>>m ){
        Init();
        Dijkstra(0);
    }
    return 0;
}

原创粉丝点击