【问题标题】:How to zero specific column of 2d array [closed]如何将二维数组的特定列归零[关闭]
【发布时间】:2016-03-31 16:30:04
【问题描述】:

假设我有一个 100x100 的特定二维数组,就像这样

我正在实现一个邻接矩阵,因此我希望能够将特定的列和行(在本例中为相同的列和行)归零,归零线非常简单,但我不太明白如何我会去列。

例如将邻接矩阵的第二个元素归零:

【问题讨论】:

  • for(int i = 0;i < n;i++) mat[k][i] = 0; for(int i = 0;i < n;i++) mat[i][k] = 0;
  • 什么?交换用于访问数组的索引。

标签: c arrays multidimensional-array adjacency-matrix


【解决方案1】:
int column=1; //in your example
int row=1;//in your example


//for rows
for(int i = 0; i<numberofrows; i++)
{
  array[i][column]=0;
}

//for columns
for(int i = 0; i<numberofcolumns; i++)
{
  array[row][i]=0;
}

【讨论】:

  • 愚蠢的我,这是最简单的事情。非常感谢!
【解决方案2】:

如果 Mat 是方阵,那么简单:

k= (cols_of_mat)/2;


for(int i = 0; i<k; i++){
    mat[k][i] = 0; 
    mat[i][k] = 0;

    //if Mat can have even size    
    if(k%2==0){
        mat[k-1][i] = 0; 
        mat[i][k-1] = 0;    
    }
}

当您的垫子有奇数/偶数尺寸时请注意!当大小相等时,我想您需要占用 2 列和 2 行!那么你应该这样做:

按照这张图片中的这个偶数示例:

【讨论】:

    【解决方案3】:

    例如你可以这样做

    for ( size_t i = 0; i < 3; i++ )
    {
        a[1][i] = 0;
        a[i][1] = 0;
    }
    

    对于 i 等于 1 a[1][1] 将被设置为零两次。然而这并不重要。如果你愿意,你可以在这种情况下使用 if 语句。

    例如

    for ( size_t i = 0; i < 3; i++ )
    {
        a[1][i] = 0;
        if ( i != 1 ) a[i][1] = 0;
    }
    

    这是一个演示程序

    #include <stdio.h>
    
    #define N1   3
    
    int main( void )
    {
        int a[N1][N1] =
        {
            { 3,  2,  5 },
            { 6,  4,  2 },
            { 1, 61, 45 }
        };        
    
        for ( size_t i = 0; i < N1; i++ )
        {
            for ( size_t j = 0; j < N1; j++ ) printf( "%2d ", a[i][j] );
            printf( "\n" );
        }
    
        size_t row = 1;
        size_t col = 1;
    
        for ( size_t i = 0; i < N1; i++ )
        {
            a[row][i] = 0;
            a[i][col] = 0;
        }
    
        printf( "\n" );
    
        for ( size_t i = 0; i < N1; i++ )
        {
            for ( size_t j = 0; j < N1; j++ ) printf( "%2d ", a[i][j] );
            printf( "\n" );
        }
    }
    

    程序输出是

     3  2  5 
     6  4  2 
     1 61 45 
    
     3  0  5 
     0  0  0 
     1  0 45 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多