1

我正在尝试一种基于度量的算法,称为出租车度量。然后我的目标是创建一个简单的例子,你有一个简单的 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

语法错误,第二个for循环没有括号。这对于单行语句是可以的,但没有括号,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 回答