dijkstra

#include <iostream>
#define MAX 999999
using namespace std;

int dist[501];  //用来存储每个点到点1的距离
int vis[501];   //用来存储点访问情况
int map[501][501];  //用来存储邻接矩阵
int n;  //节点的数目

int findmin()   //找寻当前状态下到达目标节点路径最短的点
{
    int minnode = 0,min = MAX;
    for(int i = 1;i <= n;i++)
        if(min > dist[i] && !vis[i])
        {
            min = dist[i];
            minnode = i;
        }
    return minnode;
}

int main()
{
    int i,j,n,vnum;
    cin >> n;
    memset(map,MAX,sizeof(map));
    for(i = 1;i <= n;i++)
        for(j = 1;j <= n;j++)
        {
            cin >> map[i][j];
            if(map[i][j] == 0)      map[i][j] = MAX;
        }
    for(i = 1;i <= n;i++)   dist[i] = map[1][i];    
    vis[1] = true;
    vnum = 1;
    while(vnum < n)
    {
        int node = findmin();
        if(node != 0)
        {
            vnum ++;
            vis[node] = true;
            for(i = 1;i <=  n;i++)
                if(dist[i] > dist[node] + map[node][i] && !vis[i])
                    dist[i] = dist[node] +map[node][i];
        }
        else    break;
    }
    for(i = 1;i <= n;i++)
    {
        if(dist[i] == MAX)
            cout<<-1<<" ";
        else    cout<<dist[i]<<" ";
    }
    return 0;
}

 

posted @ 2014-01-02 15:52  风吹奶子摆  阅读(119)  评论(0)    收藏  举报