poj1258

#include<stdio.h>
#define INF 0xffffff
int n,m,i,j,k,min,cost[102][102],dist[102],pos,close[102],ans;
main()
{
    while(~scanf("%d",&n))
    {
        ans=0;
        for(i=1;i<=n;i++)for(j=1;j<=n;j++)
        scanf("%d",&cost[i][j]);
        for(i=1;i<=n;i++)
        dist[i]=cost[1][i],close[i]=0;
        close[1]=1;
        for(k=1;k<n;k++)
        {
            min=INF;
            for(i=1;i<=n;i++)
            if(min>dist[i]&&!close[i])min=dist[i],pos=i;
            ans+=dist[pos];
            dist[pos]=0,close[pos]=1;
            for(i=1;i<=n;i++)
            if(cost[i][pos]<dist[i]&&!close[i])//dijkstra cost[i][pos] + min < dist[i]
            dist[i]=cost[i][pos];// dijkstra dist[i] = cost[i][pos] + min
        }//dijkstra 与 prim 算法 结构类似 主要区别为dist的定义不同  dijkstra 中dist[i]定义为从起点到i点的距离,而prim 中的dist[i]定义为已经选中的集合到该外点的距离。
        printf("%d\n",ans);
    }
}

主要记录一下dijkstra 与prim 的相似与区别。

posted on 2013-06-29 19:16  dokc  阅读(335)  评论(0编辑  收藏  举报

导航