使用出租车几何的距离:奇怪的输出

时间:2013-08-29 18:22:42

标签: c matrix

我正在尝试一种基于公制的算法,称为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?

1 个答案:

答案 0 :(得分: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语句都是这样的)