7-5 找鞍点

//找鞍点
#include<stdio.h>
int main()
{
	int n,i,j;
	int a[6][6];
	printf("Enter n:");
	scanf("%d",&n);
	printf("Enter a matrix:\n");
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			scanf("%d",&a[i][j]);
			
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%4d",a[i][j]);
		}
		printf("\n");
	}
	
	int flag,f=0;
	int col;
	int k;
	int max;
	for(i=0;i<n;i++)
	{
		max=a[i][0];
		col=0;
		for(j=0;j<n;j++)
		{
			if(a[i][j]>max)
			{
				max=a[i][j];
				col=j;
			}
		}
		
		flag=1;
		for(k=0;k<n&&flag;k++)
		{
			if(a[k][col]<max)
			{
				flag=0;
			}
		}
		if(flag)
		{
			f=1; 
			printf("鞍点为:%d %d\n",i,col);
		}
	}
	
	if(f==0)
		printf("NO\n");
	
	return 0;
} 

在C++中,“鞍点”是一个矩阵中的特殊元素,它满足两个条件: 1. 它是所在行的最小值。 2. 同时也是所在列的最大值。 ### 鞍点的基本思路 给定一个二维数组(矩阵),我们可以按以下步骤寻鞍点: 1. 遍历每一行,到该行的最小值及其对应的列索引。 2. 检查这个最小值是否同时也是其对应列的最大值。如果是,则到了鞍点。 如果存在多个鞍点或多解情况,需根据需求处理。 --- ### 示例代码 ```cpp #include <iostream> using namespace std; void findSaddlePoint(int matrix[][3], int rows, int cols) { bool found = false; for (int i = 0; i < rows; ++i) { // 遍历每行 int minRowValue = matrix[i][0]; // 当前行的最小值初始化 int colIndex = 0; // 最小值所在的列 // 寻当前行的最小值及列索引 for (int j = 1; j < cols; ++j) { if (matrix[i][j] < minRowValue) { minRowValue = matrix[i][j]; colIndex = j; } } // 判断此最小值是否为所在列的最大值 bool isMaxInCol = true; for (int k = 0; k < rows; ++k) { if (matrix[k][colIndex] > minRowValue) { isMaxInCol = false; break; } } if (isMaxInCol) { cout << "鞍点位于第" << i + 1 << "行,第" << colIndex + 1 << "列,值为:" << minRowValue << endl; found = true; } } if (!found) { cout << "未鞍点!" << endl; } } int main() { int matrix[3][3] = { {5, 6, 7}, {8, 9, 4}, {2, 3, 1} }; findSaddlePoint(matrix, 3, 3); return 0; } ``` --- ### 输出结果解释 对于上述示例矩阵 `{{5, 6, 7}, {8, 9, 4}, {2, 3, 1}}`: 1. 第一行 `[5, 6, 7]` 的最小值是 `5`,但它不是第一列的最大值。 2. 第二行 `[8, 9, 4]` 的最小值是 `4`,检查发现它是第三列的最大值,因此 `(第二行, 第三列)` 是鞍点。 3. 如果所有行列都不符合条件,则返回“未鞍点”。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值