对于编程作业,我正在实现Prim的算法,测试用例的输入文件格式如下:
输入的第一行是整数C,表示测试用例的数量。每个测试用例的第一行包含两个整数N和E,其中N表示图中的节点数,E表示边数。然后是E行,每行有3个整数I,J和P,其中I和J代表边的节点(无向图,其中0≤I,J
虽然即使我正在启动代码(我是编程新手)但我不明白为什么我的代码只读取测试用例的条目,我做错了什么?
这是读取文件entradaA.in的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv []){
int testCases;
int numberNodes;
int numberEdges;
freopen("entradaA.in", "r", stdin);
int i, j, cont=1;
int total = 0;
int a, b, c;
scanf ("%d", &testCases);
for (i=0; i<testCases; ++i)
{
scanf ("%d %d", &numberNodes, &numberEdges); //Number Nodes & Edges
for (i=0; i<numberEdges; i++)
{
scanf ("%d %d %d", &a,&b,&c);//
printf ("%d %d %d\n", a, b, c);
}
printf ("Caso %d: Total Weight %d\n", cont++, total);
}
return (0);
}
输入文件(entradaA.in)看起来像这样
2
7 11
0 1 17
0 2 10
0 6 14
1 2 6
1 3 1
2 3 4
2 6 3
3 4 7
4 6 10
4 5 2
5 6 9
6 9
0 1 30
0 2 30
1 3 22
1 5 33
2 3 20
2 4 33
3 4 15
3 5 20
5 4 20
答案 0 :(得分:1)
你在循环中修改了循环变量i
,这通常是不需要的。在这种情况下,由于i
循环到11(边数),它导致程序终止,因为11不小于2(输入中的测试用例数)。
你可以使用临时变量(如果你使用C ++,谢谢aardvarkk):
for (int i=0; i<testCases; ++i)
{
scanf ("%d %d", &numberNodes, &numberEdges); //Number Nodes & Edges
for (int j=0; j<numberEdges; j++)
请注意,int j
也可能是int i
,但我不推荐它。只使用另一个名称的变量会更清楚。或者如果您在C中,只需删除两个int
并使用函数本地的变量。
有关详情,请阅读this。
答案 1 :(得分:0)
您的代码在我的机器上产生了以下输出。我所做的唯一更改是在int
调用之前声明i
值j
,freopen
等,以使代码成为标准C.
0 1 17
0 2 10
0 6 14
1 2 6
1 3 1
2 3 4
2 6 3
3 4 7
4 6 10
4 5 2
5 6 9
Caso 1: Total Weight 0
这肯定比你的测试用例更多,所以我不确定问题是什么?