1

taxicab metricと呼ばれるメトリックに基づくアルゴリズムを試していました。次に、私の目的は簡単な例を作成することでした。単純な 3x3 マトリックスがあり、最初の位置に 1 があります。それから、次のように、他の位置の距離を計算します。

1 2 3

2 3 4

3 4 5

そのために、次のコードを作成しました。

#include <stdio.h>
#include <stdlib.h>


int main ()
{
int matrix[3][3]={1,0,0,0,0,0,0,0,0}, i, j;
for ( i=0; i<3; i++)
{
    for( j=0; j<3; j++)
        matrix[i][j]=  abs(i-1)+ abs (j-1)+1;//taxicab algorithm 
        printf("%d ",matrix[i][j]);//prints the matrix
        printf("\n");

 }
return 0;
}

ただし、出力は

0

0

3

なぜこれが起こっているのか、私にはわかりません。なぜ最初の列だけを印刷するのですか??? では、なぜ 1 が 0 になったのでしょうか。

4

1 に答える 1

3

構文ミスです。2 番目のforループには括弧がありません。これは 1 行のステートメントでは問題ありませんが、括弧なしではif, for, while, etc、その後の最初の行 (セミコロンまで) にのみ適用されます。for複数行のループにブラケットを追加します。

for (i=0; i<3; i++)
{
    for(j=0; j<3; j++)
    {
        matrix[i][j] = abs(i-1) + abs(j-1) + 1; //taxicab algorithm 
        printf("%d ",matrix[i][j]); //prints the matrix
    }
    printf("\n");
}

あなたのコードでは、これにより print ステートメントが思ったほど頻繁に呼び出されませんでした。

for(実際には、すべてのループで常に括弧を使用することをお勧めします。ifこの理由から、ほとんどのステートメントで)

于 2013-08-29T18:26:03.323 に答える