第三章 循环求鞍点

// 求矩阵的鞍点:行最小,列最大的值 

#include <stdio.h>
#include <string.h>

// 输入矩阵
void inputSaddlePoint(int arr[][10],int n) {
    int i,j;
    for(i = 0; i < n ; i++) {
        for (j = 0; j < n ; j++) {
            // scanf 中填入二维数组也要加 & 
            scanf("%d", &arr[i][j]);
        }
    }

// 输出矩阵
void printSaddlePoint(int arr[][10],int n) {
    int i,j;
    for(i = 0; i < n ; i++) {
        for (j = 0; j < n ; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

// 求鞍点
void findSaddlePoint(int arr[][10], int n) {
    int i,j,k;
    // 标志量 
    int kz = 0; 
    // 先找每行上最小的
    for (i = 0; i <n; i++) {
        // 从第 i 行第一个开始 
        int t = arr[i][0];
        // minj记录每行中最小值所对应的列 
        int minj = 0;
        for (j = 1; j < n; j++) {
            // 找到比初始值小的,然后记录它的列号 
            if (arr[i][j] < t) {
                t = arr[i][j];
                minj = j;
            }
        } 
        // 找列上最大的
        for (k = 0; k < n; k++) {
            // 如果在同一列有比它大的数,那么就不成立,跳出循环 
            if (arr[k][minj] > t) break; 
        } 
        // 如果循环未结束,也就是 在同一列有比它大的数,那么直接进行下一行的比较 
        if (k < n) continue;
        // 如果循环结束,也就是 该数是满足列上最大的,是鞍点 
        printf("满足的鞍点是:%d",t);
        kz = 1;
        break; 
    }
    if (kz == 0) printf("没鞍点!");    

int main() {
    int arr[10][10];
    int n;
    printf("输入几行几列矩阵:");
    scanf("%d", &n); 
    // 输入矩阵
    inputSaddlePoint(arr,n);
    // 打印矩阵
    printSaddlePoint(arr,n);
    // 求鞍点 
    findSaddlePoint(arr,n);
    return 0;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,用于寻找矩阵的鞍点: ```c #include <stdio.h> #define ROWS 3 #define COLS 3 int main() { int matrix[ROWS][COLS] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int saddle_point = 0; for (int i = 0; i < ROWS; i++) { int min_row = matrix[i][0]; int min_col = 0; for (int j = 1; j < COLS; j++) { if (matrix[i][j] < min_row) { min_row = matrix[i][j]; min_col = j; } } int flag = 1; for (int k = 0; k < ROWS; k++) { if (matrix[k][min_col] > min_row) { flag = 0; break; } } if (flag) { saddle_point = min_row; printf("Saddle point found at (%d, %d): %d\n", i, min_col, saddle_point); break; } } if (!saddle_point) { printf("No saddle point found.\n"); } return 0; } ``` 在这个示例代码中,我们假设有一个名为 `matrix` 的矩阵,它包含了一些整数值。我们要在矩阵中寻找鞍点,即在矩阵中找到一个元素,在该元素所在的行中是最小的,在该元素所在的列中是最大的。 我们使用两个循环来遍历矩阵中的每个元素。在第一个循环中,我们遍历每一行,并找到该行中的最小值。在第二个循环中,我们遍历该行中的每个元素,并找到该元素所在的列。然后,我们使用一个名为 `flag` 的标志来检查该元素是否是该列中的最大值。如果是,我们将鞍点设置为该元素的值,并输出其坐标。如果我们在整个矩阵中找不到鞍点,则输出一条相应的消息。 注意,这只是一个简单的示例代码,用于说明如何查找矩阵中的鞍点。在实际应用中,可能需要考虑更多的情况和复杂性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值