求一个二维数组中的鞍点
时间: 2023-12-16 12:26:46 浏览: 144
以下是求一个二维数组中的鞍点的Python代码实现:
```python
# 定义一个函数来寻找鞍点
def find_saddle_point(matrix):
for i in range(len(matrix)):
# 找到该行中的最大值及其索引
max_in_row = max(matrix[i])
max_index = matrix[i].index(max_in_row)
# 判断该最大值是否为该列中的最小值
if max_in_row == min([matrix[j][max_index] for j in range(len(matrix))]):
return (i, max_index, max_in_row) # 返回鞍点的位置及其值
return None # 如果没有鞍点,则返回None
# 测试
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
saddle_point = find_saddle_point(matrix)
if saddle_point:
print("鞍点位置:({}, {}),鞍点值:{}".format(saddle_point[0], saddle_point[1], saddle_point[2]))
else:
print("该二维数组中没有鞍点。")
```
输出结果为:
```
鞍点位置:2, 0,鞍点值:7
```
相关问题
编程判断3*3的二维数组是否存在鞍点;如果存在鞍点请输出该值及其在数组中的下标值(X,Y). 鞍点即是在这个二维数组中,某一个位置上的元素在该行上最大,该列上最小。 程序运行示例1: 请输入二维数组: 9 8 3 6 3 4 4 3 2 该二维数组的鞍点为4:下标为(2,0). 程序运行示例2: 请输入二维数组: 4 5 7 3 8 5 6 9 4 该二维数组中没有鞍点. 输入3*3的二维数组提示信息:"请输入二维数组:\n" 输入格式:%d 存在鞍点输出格式:"该二维数组的鞍点为%d:下标为(%d,%d).\n" 不存在鞍点输出提示:"该二维数组中没有鞍点.\n"
以下是C语言实现的代码:
```c
#include <stdio.h>
int main()
{
int arr[3][3];
printf("请输入二维数组:\n");
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
scanf("%d",&arr[i][j]);
}
}
int flag=0;
for(int i=0;i<3;i++)
{
int max=arr[i][0];
int index_j=0;
for(int j=1;j<3;j++)
{
if(arr[i][j]>max)
{
max=arr[i][j];
index_j=j;
}
}
int min=arr[0][index_j];
int index_i=0;
for(int j=1;j<3;j++)
{
if(arr[j][index_j]<min)
{
min=arr[j][index_j];
index_i=j;
}
}
if(max==min)
{
printf("该二维数组的鞍点为%d:下标为(%d,%d).\n",max,index_i,index_j);
flag=1;
break;
}
}
if(flag==0)
{
printf("该二维数组中没有鞍点.\n");
}
return 0;
}
```
运行示例:
输入:
```
请输入二维数组:
9 8 3
6 3 4
4 3 2
```
输出:
```
该二维数组的鞍点为4:下标为(2,0).
```
输入:
```
请输入二维数组:
4 5 7
3 8 5
6 9 4
```
输出:
```
该二维数组中没有鞍点.
```
找出一个二维数组的鞍点
在一个二维数组(矩阵)中,鞍点是指那些同时满足以下两个条件的元素:它比其左边的所有元素都大,也比其上边的所有元素都小。形象地说,就是它像是马鞍的形状,两边高而中间低。
寻找鞍点的算法通常涉及两步比较过程:
1. 横向扫描:从左到右遍历每一行,记录当前列的最大值。
2. 纵向扫描:从上到下遍历每一列,检查每个位置的元素是否小于等于左侧最大值并且大于等于上方最小值。
以下是Python的一个简单示例:
```python
def find_saddle_point(matrix):
rows = len(matrix)
cols = len(matrix[0])
# 初始化最大值和最小值
max_val = matrix[0][0]
min_val = matrix[0][0]
max_left = float('-inf')
min_up = float('inf')
for i in range(1, rows):
if matrix[i][0] > max_left:
max_left = matrix[i][0]
for j in range(1, cols):
min_up = min(min_up, matrix[0][j])
for i in range(rows):
for j in range(cols):
# 如果当前位置既是最大值又是最小值,但它不是第一个位置,则可能是鞍点
if matrix[i][j] >= max_left and matrix[i][j] <= min_up and i != 0 and j != 0:
if matrix[i][j] > max_val:
max_val = matrix[i][j]
elif matrix[i][j] < min_val:
min_val = matrix[i][j]
return max_val, min_val
# 示例用法
matrix = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
saddle_points = find_saddle_point(matrix)
print("Saddle point(s):", saddle_points)
阅读全文
相关推荐













