1

プログラミングの宿題として、Prim のアルゴリズムを実装しています。テスト ケースの入力ファイルの形式は次のとおりです。

入力の最初の行は、テスト ケースの数を示す整数 C になります。各テスト ケースの最初の行には、2 つの整数 N と E が含まれます。ここで、N はグラフ内のノードの数を表し、E はエッジの数をそれぞれ表します。次に、それぞれ 3 つの整数 I、J、P を持つ E 行が続きます。ここで、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
4

2 に答える 2

1

ループ内でループ変数をi変更しましたが、これは一般的には望ましくありません。この場合、i11(エッジの数)にループしているため、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を使用している場合は、2つを削除しintて、関数にローカルな変数を使用します。

詳細については、これを読むことができます。

于 2011-07-11T04:10:34.240 に答える
0

あなたのコードは私のマシンで次の出力を生成しました。私が行った唯一の変更は、コードを標準Cにするための呼び出しの前に、値などをint宣言することでした。ijfreopen

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

それは間違いなくあなたのテストケースよりも多くを読んでいるので、私は問題が何であるかわかりませんか?

于 2011-07-11T04:11:01.097 に答える