您的位置:首页 > 其它

prim

2015-10-22 17:28 381 查看
#include <stdio.h>
#include <string.h>
#define MaxInt 0x3f3f3f3f

int Answer;
int map[102][102];
int visited[102],low[102];
int n;
int prim()

{

int i,j,pos,min,result=0;

memset(visited,0,sizeof(visited));

visited[1]=1;
pos=1;

//第一次给low数组赋值

for(i=1;i<=n;i++)
{
if(i!=pos)
low[i]=map[pos][i];
}
//再运行n-1次
for(i=1;i<n;i++)
{
//找出最小权值并记录位置
min=MaxInt;
for(j=1;j<=n;j++)
{
if(visited[j]==0 && min>low[j])
{
min=low[j];
pos=j;
}
}
result+=min;
visited[pos]=1;
for(j=1;j<=n;j++)
{
if(visited[j]==0&&low[j]>map[pos][j])
low[j]=map[pos][j];
}
}
return result;
}

int main(void)
{
int T, test_case;
int i,j;

setbuf(stdout, NULL);

scanf("%d", &T);
for(test_case = 0; test_case < T; test_case++)
{
Answer = 0;
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
scanf("%d", &map[i][j]);
}
}
Answer = prim();

printf("Case #%d\n", test_case+1);
printf("%d\n", Answer);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  prim