关闭

寻找矩阵鞍点

127人阅读 评论(0) 收藏 举报
分类:
    一个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 10

void 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:878次
    • 积分:47
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档