栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言动态规划求最小生成树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言动态规划求最小生成树

思路

用动态规划求解最小生成树最简单,定义两个数组,一个数组存放开始节点另一个数组存放开始节点到所有节点的路径长度,然后每次更新,找到最短的路径后,把找到的路径的终止节点所在的数组的值置零,并把该节点存入起始节点的数组,找新加入的数组到各个数组节点的长度值,与原数组值进行比较,小的放进去,大的保持不变,具体看代码

用的是这个图

#include

#define max 999

int minx(int a[]){

int i,j,min=999;

for (i=0;i<6;i++) {

if (a[i] != 0 && a[i] < min) {

min = a[i];

j = i;

}

}

return j;

}

int main() {

int i, j, k=0;

int a[6][6] = { {0,6,6,4,max,max},

{6,0,1,2,max,max},

{6,1,0,2,5,3},

{4,2,2,0,max,4},

{max,max,5,max,0,4},

{max,max,3,4,4,0} };

int end[6] = { 0,6,6,4,max,max };

int start[6]={0,0,0,0,0,0};

printf("%c", k + 65);

for(i=0;i<5;i++)

{

k = minx(end);

printf("-%c", k + 65);

end[k] = 0;

for(j=0;j<6;j++)

{

if(a[k][j]

{

end[j] = a[k][j];

start[j] = k;

}

}

}

return 0;

}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号