看下这个作业题的代码怎么整

短阵消减。给定一个NN的整数短阵N=7,用NN个【10,99】的随机整数赋值。然后进行N-1次消减,每次消减过程中先对每一行的所有元素减本行最小元素,再对每一列的所有元素减本列最小元素,处理后消去短阵的第二行和第二列(下标是1),输出消减过程中各个短阵。


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<memory.h>
void displayArray(int** array, int** mark, int N) {
    int i, j;
    for (i = 0; i < N * 5; i++)
        printf("-");
    printf("\n");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            if (mark[i][j])
                printf("%4d ", array[i][j]);
            else
                printf("NULL ");
        }
        printf("\n");
    }
    for (i = 0; i < N * 5; i++)
        printf("-");
    printf("\n");
}
int main() {
    int N = 7, i, j, t;
    srand((unsigned)time(0));
    // scanf("%d",&N);
    int** array = (int**)malloc(sizeof(int*) * N);
    int** mark = (int**)malloc(sizeof(int*) * N);
    if (array == NULL || mark == NULL) return -1;
    for (i = 0; i < N; i++) {
        array[i] = (int*)malloc(sizeof(int) * N);
        mark[i] = (int*)malloc(sizeof(int) * N);
        if (array[i] == NULL || mark[i] == NULL) return -1;
        for (j = 0; j < N; j++)
            array[i][j] = rand() % (99 - 10 + 1) + 10;
        memset(mark[i], 1, sizeof(int) * N);
    }
    printf("Initial:\n");
    displayArray(array, mark, N);
    //削减过程
    int min_index, minValue;
    for (t = 0; t < N - 1; t++) {
        //对行
        for (i = 0; i < N; i++) {
            min_index = -1;
            minValue = 100;
            for (j = 0; j < N; j++) {
                if (mark[i][j] && array[i][j] < minValue) {
                    minValue = array[i][j];
                    min_index = j;
                }
            }
            if (min_index > 0)
                mark[i][min_index] = 0;
        }
        //对列
        for (j = 0; j < N; j++) {
            min_index = -1;
            minValue = 100;
            for (i = 0; i < N; i++) {
                if (mark[i][j] && array[i][j] < minValue) {
                    minValue = array[i][j];
                    min_index = i;
                }
            }
            if (min_index > 0)
                mark[min_index][j] = 0;
        }
        printf("Time %d:\n", t);
        displayArray(array, mark, N);
    }
    //回收空间
    for (i = 0; i < N; i++) {
        free(array[i]);
        free(mark[i]);
    }
    free(array);
    free(mark);
}

对每一列的所有元素减本列最小元素,是在上一步的基础上获取本列最小数据,还是在原矩阵的基础上获取本列最小数据,有没有例子,给一个啊