马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 我的代码样例过了,自己又举了两个例子,也过了,但提交的时候,却显示错误答案,找了半天也没发现错误,求各路大神帮忙看看。#include <stdio.h>
#include <stdlib.h>
#define INFINITY 65535
#define MAXVEX 100
typedef struct
{
char vexs[MAXVEX];
int arc[MAXVEX][MAXVEX];
int numVertexes, numEdges;
}MGraph;
long long num = 0;
void CreateMGraph(MGraph *G)
{
int i, j, q, m, n;
scanf("%d", &G->numVertexes);
for(i=0; i<G->numVertexes; i++)
{
for(j=0; j<G->numVertexes; j++)
{
getchar();
scanf("%d", &G->arc[i][j]);
}
}
scanf("%d\n", &q);
for(i=0; i<q; i++)
{
scanf("%d %d", &m, &n);
G->arc[m-1][n-1] = 1;
G->arc[n-1][m-1] = 1;
num--;
}
}
void prim(MGraph *G)
{
int lowcost[MAXVEX];
int min, i, j, k;
for(i=0; i<G->numVertexes; i++)
{
lowcost[i] = G->arc[0][i];
}
//实现过程
for(i=0; i<G->numVertexes; i++)
{
min = INFINITY;
j = 1;
k = 0;
while(j<G->numVertexes)
{
if(lowcost[j] != 0 && lowcost[j] < min)
{
min = lowcost[j];
k = j;
}
j++;
}
if(min != INFINITY)
num += min;
lowcost[k] = 0;
for(j=1; j<G->numVertexes; j++)
{
if(lowcost[j]!=0 && G->arc[k][j]<lowcost[j])
{
lowcost[j] = G->arc[k][j];
}
}
}
printf("%d", num);
}
int main()
{
MGraph G;
CreateMGraph(&G);
prim(&G);
system("pause");
return 0;
}
|