短阵消减。给定一个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);
}
对每一列的所有元素减本列最小元素,是在上一步的基础上获取本列最小数据,还是在原矩阵的基础上获取本列最小数据,有没有例子,给一个啊