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 的相似与区别。