寻找矩阵鞍点

来源:互联网 发布:父母干涉爱情知乎 编辑:程序博客网 时间:2024/05/16 19:13
    一个m*n矩阵鞍点(saddle):如果存在某个元素a[i][j]是第i行的最小值,第j列的最大值,则此元素就是矩阵的鞍点。    | 1 , 2 , 3 |    | 4 , 5 , 6 |    | 7 , 8 , 9 |如,此矩阵的鞍点即为a[0][2] == 7。    这个程序有一个缺陷就是当一行中,有两个相等的最小值,且第一个最小值不是矩阵鞍点时,程序不会在检测第二个值。
/* c语言求鞍点程序 */#include <stdio.h>#include <stdlib.h>#define max_size 10void findSaddle(int (*list)[max_size], int m, int n){/* find saddle item int matrix */    int i, j;    int rowMin, colMax, isSaddle;    printf("the matrics:\n");    for(i = 0; i < m; i++){        for(j = 0; j < n; j++){            printf("%3d", list[i][j]);        }        printf("\n");    }    for(i = 0; i < m; i++){        rowMin = 0;        for(j = 1; j < n; j++){            if(list[i][j] < list[i][rowMin])                rowMin = j;        }        colMax = i, isSaddle = 1;        for(j = 1; j < m; j++){            if(list[j][rowMin] > list[colMax][rowMin]){                isSaddle = 0;                break;            }        }        if(isSaddle){            printf("the saddle of array is a[%d][%d] == %d\n", colMax, rowMin, list[colMax][rowMin]);            exit(1);        }    }    printf("there is no sabble in the array!\n");}void main(){    int M, N, i, j;    int a[max_size][max_size];    printf("input the row num:");    scanf("%d", &M);    printf("input the col num:");    scanf("%d", &N);    for(i = 0; i < M; i++){        for(j = 0; j < N; j++){            printf("input the a[%d][%d]:", i, j);            scanf("%d", &a[i][j]);        }    }    findSaddle(a, M, N);}
0 0
原创粉丝点击