您的位置:首页 > 其它

最小生成树PRIM()算法框架

2013-08-27 11:00 246 查看
#include<stdio.h>
#include<stdlib.h>
#define max 2005
#define INF 0xfffff

int map[max][max];//节点i,j之间的距离即为map[i][j],map[j][i];
int dis[max];//用来判断当前节点是否为生成树上节点
int ans,n;//ans表示生成树上的权重之和

void prim();
int min(int a,int b)
{return a>b?b:a;}

int main(void)
{
//求出所有的map[i][j];
prim();
return 0;
}

void prim()
{
int i,j,now;
int minedge,minnode;

for(i=1;i<=n;i++)
dis[i]=INF;
now=1;
ans=0;
for(i=1;i<n;i++)//找到n-1条边
{
dis[now]=-1;//将点now加入最小生成树节点中
minedge=INF;
for(j=1;j<=n;j++)
{
if(j!=now&&dis[j]>=0)
{
dis[j]=min(dis[j],map[now][j]);
if(dis[j]<minedge)
{
minedge=dis[j];
minnode=j;//循环求出最小节点、最小权
}
}
}
now=minnode;//更新当前节点
ans+=minedge;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: