思路:开辟一个新的同样规格的矩阵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;
}
运行结果: