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



