本文主要是介绍九度Online Judge解题报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
九度1017:题目如下:
- 题目描述:
- 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
- 输入:
-
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
- 输出:
-
对每个测试用例,在1行里输出最小的公路总长度。
- 样例输入:
-
3 1 2 1 1 3 2 2 3 4 4 1 2 1 1 3 4 1 4 1 2 3 3 2 4 2 3 4 5 0
- 样例输出:
-
3 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>const int N = 100;
const int MaxInt = 99999999;int map[100][100], low[100], visited[100], n;int prim()
{int i, j, min, pos;int result = 0;memset(low, 0, sizeof(low));memset(visited, 0, sizeof(visited));visited[1] = 1; pos = 1;for(i = 1; i <= n; i++)if(i != pos)low[i] = map[pos][i];for(i = 1; i < n; i++){min = MaxInt;for(j = 1; j <= n; j++)if(visited[j] == 0 && min > low[j]){min = low[j];pos = j;}visited[pos] = 1;result += min;for(j = 1; j <= n; j++)if(visited[j] == 0 && low[j] > map[pos][j])low[j] = map[pos][j];}min = 0;return result;
}int main()
{int i, j, s, e, w, m;while(~scanf("%d", &n)){if(n == 0)break;m = n*(n-1)/2;for(i = 1; i <= n; i++)for(j = 1; j <= n; j++)map[i][j] = MaxInt;for(j = 1; j <= m; j++){scanf("%d %d %d", &s, &e, &w);map[s][e] = map[e][s] = w;}printf("%d\n", prim());}//system("pause");return 0;
}
好了,接下来该我吐槽了,真不知道这Judge是怎么搞得,注意到我用的全局变量那些数组了吗,其中的100是我const的常量,但是如是:map[N][N]却一直报错,我真搞不懂我是哪里错了,大神Judge能给指点一下吗?非得逼我改成确定的100才行,话说我那时const过的啊!!!!!!
这篇关于九度Online Judge解题报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!