已有140人关注
程序不知哪里写的不对,循环部分运行不了
发表在C语言答疑区 2016-12-08
是否精华
版块置顶:

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

using namespace::std;


#define MAX 100

#define MAXCOST 0x7fffffff


int graph[MAX][MAX];


int Prim(int graph[][MAX], int n)

{

/* lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树 */

int lowcost[MAX];

/* mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树 */

int mst[MAX];

int i, j, min, minid, sum = 0;

/* 默认选择1号节点加入生成树,从2号节点开始初始化 */

for (i = 2; i <= n; i++)

{

/* 最短距离初始化为其他节点到1号节点的距离 */

lowcost[i] = graph[1][i];

/* 标记所有节点的起点皆为默认的1号节点 */

mst[i] = 1;

}

/* 标记1号节点加入生成树 */

mst[1] = 0;

/* n个节点至少需要n-1条边构成最小生成树 */

for (i = 2; i <= n; i++)

{

min = MAXCOST;

minid = 0;

/* 找满足条件的最小权值边的节点minid */

for (j = 2; j <= n; j++)

{

/* 边权值较小且不在生成树中 */

if (lowcost[j] < min && lowcost[j] != 0)

{

min = lowcost[j];

minid = j;

}

}

/* 输出生成树边的信息:起点,终点,权值 */

cout << mst[minid] + 'A' - 1<<"-";

cout << minid + 'A' - 1;

cout<< min <<"\n";

/* 累加权值 */

sum += min;

/* 标记节点minid加入生成树 */

lowcost[minid] = 0;

/* 更新当前节点minid到其他节点的权值 */

for (j = 2; j <= n; j++)

{

/* 发现更小的权值 */

if (graph[minid][j] < lowcost[j])

{

/* 更新权值信息 */

lowcost[j] = graph[minid][j];

/* 更新最小权值边的起点 */

mst[j] = minid;

}

}

}

/* 返回最小权值和 */

return sum;

}


int main()

{

int i, j, k, m, n;

int x, y, cost;

char chx[3];

char chy[3];

/* 读取节点和边的数目 */

cin >> m;

cin >> n;

cin >>"\n";

//getchar();

/* 初始化图,所有节点间距离为无穷大 */

for (i = 1; i <= m; i++)

{

for (j = 1; j <= m; j++)

{

graph[i][j] = MAXCOST;

}

}

 

/* 读取边信息 */

for (k = 0; k < n; k++)

{

cin.getline(chx,2);

cin.getline(chy,2);

cin>> cost;

cin >>"\n";

//getchar();

i = chx[3] - 'A' + 1;

j = chy[3] - 'A' + 1;

graph[i][j] = cost;

graph[j][i] = cost;

}

/* 求解最小生成树 */

cost = Prim(graph, m);

/* 输出最小权值和 */

cout <<"Total:"<< cost <<"\n";

//system("pause");

return 0;

}
主程序第二个for循环运行时没有循环,求解答。


分享到:
精彩评论 2
again
学分:250 LV4
2016-12-08
沙发

您对这个程序的输入是什么?
如何确定第二个循环没有运行的?

在第二个循环的开始部分,也就是:
   

for (k = 0; k < n; k++)
     {
     // 这里
增加一个输出语句,打印出 k、n的值看一下,是否有输出。

如果会调试的话。最好在for这一行设置一个断点, 这样方便查找哪里错了。

浩南2哥
学分:27 LV2
2016-12-08
板凳

先是要输入这些数据7 11
A B 7
A D 5
B C 8
B D 9
B E 7
C E 5
D E 15
D F 6
E F 8
E G 9
F G 11
输出应为
A - D : 5
D - F : 6
A - B : 7
B - E : 7
E - C : 5
E - G : 9
Total:39 我运行时,才输入2行就开始运行了

首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照