鱼C论坛

 找回密码
 立即注册
查看: 4083|回复: 1

关于最小生成树,普里姆算法

[复制链接]
发表于 2017-2-7 17:45:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 gascd 于 2017-2-7 17:49 编辑

代码为hdu1102的错误答案
原题目:http://acm.hdu.edu.cn/showproblem.php?pid=1102

题目大意为, 有N(3<=N<=100)个村庄,需要给村庄之间修路。
每个村庄之间的距离范围是[1,1000],其中已经修好了Q(0 <= Q <= N * (N + 1) / 2)条路。
输入:第一行输入整数N,在接下来N行输入矩阵。再输入整数Q,在接下来Q行,每行输入2个整数,代表两个村庄已经有修好的路。
输出:你需要修建的路的长度。
样例输入:
3
0 990 692
990 0 179
692 179 0
1
1 2
样例输出:
179
我的代码样例过了,自己又举了两个例子,也过了,但提交的时候,却显示错误答案,找了半天也没发现错误,求各路大神帮忙看看。
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define INFINITY 65535
  4. #define MAXVEX 100

  5. typedef struct
  6. {
  7.         char vexs[MAXVEX];
  8.         int arc[MAXVEX][MAXVEX];
  9.         int numVertexes, numEdges;
  10. }MGraph;
  11. long long num = 0;

  12. void CreateMGraph(MGraph *G)
  13. {
  14.         int i, j, q, m, n;

  15.         scanf("%d", &G->numVertexes);
  16.         for(i=0; i<G->numVertexes; i++)
  17.         {
  18.                 for(j=0; j<G->numVertexes; j++)
  19.                 {
  20.                         getchar();
  21.                         scanf("%d", &G->arc[i][j]);
  22.                 }
  23.         }
  24.         scanf("%d\n", &q);
  25.         for(i=0; i<q; i++)
  26.         {
  27.                 scanf("%d %d", &m, &n);
  28.                 G->arc[m-1][n-1] = 1;
  29.                 G->arc[n-1][m-1] = 1;
  30.                 num--;
  31.         }
  32. }

  33. void prim(MGraph *G)
  34. {
  35.         int lowcost[MAXVEX];
  36.         int min, i, j, k;

  37.         for(i=0; i<G->numVertexes; i++)
  38.         {
  39.                 lowcost[i] = G->arc[0][i];
  40.         }

  41.         //实现过程
  42.         for(i=0; i<G->numVertexes; i++)
  43.         {
  44.                 min = INFINITY;
  45.                 j = 1;
  46.                 k = 0;
  47.                 while(j<G->numVertexes)
  48.                 {
  49.                         if(lowcost[j] != 0 && lowcost[j] < min)
  50.                         {
  51.                                 min = lowcost[j];
  52.                                 k = j;
  53.                         }
  54.                         j++;
  55.                 }
  56.                 if(min != INFINITY)
  57.                         num += min;
  58.                 lowcost[k] = 0;
  59.                 for(j=1; j<G->numVertexes; j++)
  60.                 {
  61.                         if(lowcost[j]!=0 && G->arc[k][j]<lowcost[j])
  62.                         {
  63.                                 lowcost[j] = G->arc[k][j];
  64.                         }
  65.                 }
  66.         }
  67.         printf("%d", num);
  68. }

  69. int main()
  70. {
  71.         MGraph G;
  72.         CreateMGraph(&G);
  73.         prim(&G);
  74.         system("pause");
  75.         return 0;
  76. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-7 17:52:26 | 显示全部楼层
贪心只能过样例
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-20 01:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表