1. 程式人生 > >c語言矩陣

c語言矩陣

 

思路:開闢一個新的同樣規格的矩陣b,並將其全部置1.

遍歷矩陣a(原矩陣),發現有0的就在b的此行此列中插入0

//
//  main.c
//  test
//
//  Created by 神威 on 2018/9/11.
//  Copyright © 2018年 神威. All rights reserved.
//
#include <stdio.h>
#define M 6
#define N 5
int main(int argc, const char * argv[]) {
    int **addOne(int a[M][N]);
    int i,j;
    int a[M][N] = {
        0,1,1,0,1,
        1,1,1,0,1,
        1,1,1,1,1,
        1,1,1,0,1,
        1,1,0,1,0,
        1,1,1,1,1
    };
    printf("\n呼叫函式之後:\n");
    int **b = addOne((int **)a);
    for(i=0;i<M;i++){
        for(j=0;j<N;j++)
            printf("%d\t",*((int *)b+N*i+j));
        printf("\n");
    }
    return 0;
}
int **addOne(int a[M][N]){
    int **b =(int **)malloc(M*sizeof(int *));//先申請M個指標型位元組的空間
    for (int i=0;i<M;i++)
        b[i]=(int *)malloc(N*sizeof(int));//然後依次按一維申請
    int i,j,x,y;
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            *((int *)b+N*i+j)=1;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            if(a[i][j]==0){
                for(x=0;x<M;x++)
                    *((int *)b+N*x+j) = 0;
                for(y=0;y<N;y++)
                    *((int *)b+N*i+y) = 0;
            }
        }
    }
   
    return b;
}

執行結果: