发布于2019-08-30 11:05 阅读(820) 评论(0) 点赞(21) 收藏(1)
不用判断加入的点是否会形成连通图
#include<stdio.h>
#define N 6
#define MAX 100000
int a[N][N],result[N][N];
int main()
{
int flag[100] = { 0 };
int neighbor[100],distance[100];
int u, v, l;
//对数据进行初始化
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
a[i][j] = MAX;
}
scanf("%d%d%d", &u, &v, &l);
while (l != -1)
{
a[u][v] = l;
a[v][u] = l;
scanf("%d%d%d", &u, &v, &l);
}
for (int i = 0; i < N; i++)
{
neighbor[i] = 0;
distance[i] = a[0][i];
}
flag[0] = 1;//以第0个点为起点
for (int i = 1; i < N; i++)
{
int min = MAX;
for (int j = 0; j < N; j++)
{
if (!flag[j] && min>distance[j])
{
min = distance[j];
v = j;
}
}//找到距离最短那条边,并把v加进最小生成树
if (min < MAX)
{
flag[v] = 1;
result[neighbor[v]][v] = distance[v];
result[v][neighbor[v]] = distance[v];
for (int j = 0; j < N; j++)
{
//更新distance数组,将距离小的加进去
if (!flag[j] && a[v][j] < distance[j])
{
distance[j] = a[v][j];
neighbor[j] = v;//更新来源
}
}
}
else break;
}
//将结果输出
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
printf("%d ",result[i][j]);
putchar(10);//换行
}
return 0;
}
复制代码
0 1 5
0 2 6
0 3 4
1 2 1
1 3 2
2 3 2
2 4 5
2 5 3
3 5 4
4 5 4
-1 -1 -1
复制代码
作者:短发越来越短
链接:https://www.pythonheidong.com/blog/article/71028/d3a7a81f34286e0864f6/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!