寻找马鞍点的c语言算法(数据结构之数组)







从一个二维数组中,寻找马鞍点,马鞍点的特点就是在一个维度上是最小值,在另一个维度上为最大值,就马鞍中间的那个点,需要进行两次比较,一个维度的比较找到最小值,再把此最小值跟另一个维度上的数比较是否为最大值来找到马鞍点,需要三个循环变量,一个标志量。

void Get_Saddle(int A[m][n])
{
	int i,j,flag,min,k;
	for(i=0;i<m;i++)
	{
		min=A[i][0];
		for(j=0;j<n;j++)
		{
			if(A[i][j]<min)
				min=A[i][j];/*求第i行的最小值*/
			for(j=0;j<n;j++)
				if(A[i][j]==min)   /* 判断此最小值是否为马鞍点*/
				{    flag==1;
					 for(k=0;k<n;k++)
						 if(min<A[k][j]) flag=0;
					 if(flag)
						 printf("Found a saddle element !\n A[%d][%d]=%d",i,j,A[i][j]);
				}
      
	    }
	}
		printf("\n");

}


  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
矩阵的鞍点是指在矩阵中某个元素在其所在行中最小,而在其所在列中最大的元素。如果一个矩阵中存在鞍点,那么这个点就是唯一的。 我们可以通过遍历矩阵,找到每一行中的最小元素和每一列中的最大元素,然后判断是否存在一个元素既是最小值又是最大值。如果存在这样的元素,则它就是矩阵的鞍点。 下面是一个用 C++ 实现的示例代码: ```cpp #include <iostream> using namespace std; const int N = 110; int main() { int a[N][N]; int n, m; cin >> n >> m; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> a[i][j]; bool found = false; for (int i = 0; i < n; i++) { int min_val = a[i][0], min_j = 0; for (int j = 1; j < m; j++) if (a[i][j] < min_val) { min_val = a[i][j]; min_j = j; } bool is_saddle = true; for (int k = 0; k < n; k++) if (a[k][min_j] > min_val) { is_saddle = false; break; } if (is_saddle) { cout << "Saddle point found at (" << i << ", " << min_j << "): " << min_val << endl; found = true; break; } } if (!found) cout << "No saddle point found." << endl; return 0; } ``` 这里我们用了两层循环,第一层循环遍历每一行,第二层循环遍历每一列。在第一层循环中,我们找到当前行中的最小值和对应的列号,然后在第二层循环中判断这个最小值是否是其所在列的最大值,如果是,则找到了矩阵的鞍点。如果没有找到,则输出“No saddle point found.”。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值