| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么老是WA呢???#include <stdio.h>
#include <string.h>
#define MAX 32768
int main(int argc, char **argv)
{
float cables, value, min, result = 0.0;
int i, j, k, names, paths, row, col;
char buf1[25], buf2[25];
scanf("%f", &cables);
getchar();
scanf("%d", &names);
getchar();
int nodes[names], closest[names];
char name[names][25];
float lowcost[names], path[names][names];
memset(nodes, 0, sizeof(nodes));
memset(lowcost, 0, sizeof(nodes));
memset(closest, 0, sizeof(nodes));
memset(name, 0, sizeof(name));
memset(path, 0, sizeof(path));
for(i = 0; i < names; i++){
scanf("%s", name[i]);
getchar();
}
scanf("%d", &paths);
getchar();
for(i = 0; i < paths; i++){
row = col = 0;
scanf("%s %s %f", buf1, buf2, &value);
getchar();
for(j = 0; j < names; j++){
if(strcmp(buf1, name[j]) == 0){
row = j;
}
else if(strcmp(buf2, name[j]) == 0){
col = j;
}
}
path[row][col] = path[col][row] = value;
}
nodes[0] = 1;
for(i = 1; i < names; i++){
lowcost[i] = path[0][i];
closest[i] = 0;
}
for(i = 1; i < names; i++){
min = MAX;
j = 0;
for(k = 1; k < names; k++){
if(!nodes[k] && lowcost[k] < min){
min = lowcost[k];
j = k;
}
}
nodes[j] = 1;
result += min;
for(k = 1; k < names; k++){
if(!nodes[k] && path[j][k] && path[j][k] < lowcost[k]){
lowcost[k] = path[j][k];
closest[k] = j;
}
}
}
if(result > cables){
printf("Not enough cable\n");
}
else{
printf("Need %.1f miles of cable\n", result);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator