数据结构---(一)求矩阵中的鞍点

1.实验目的:掌握二维数组的计算,以及常用字符函数的使用。

2.实验问题:设计一个查找鞍点的算法。一个二维数组中的鞍点,是指该位置上的元素,在所在行中最大,而在所在列中最小;一个二维数组也可能没有鞍点。

3.解题思路:可用二维数组保存元素,按照鞍点的定义,只要找出一些点,在该点位置上的元素,在该行最大,在该列上最小即可。可以先找出第i行上最大的元素,记下所在的列号c,最大元素的值rmax;然后在第c列上,把rmax和该列上的其他元素比较,判断该列上rmax是否是最小的元素,只要有一个元素是小于它,则说明rmax在该列上不是最小元素;若rmax是c列上最小的,则找到鞍点,打印此鞍点的值,然后重复以上步骤,直至所有的行查找完毕。

4.程序实现:

/* 查找鞍点 */
#include "stdio.h"
#define m 3
#define n 3
int find(int R[m][n])	/*查找鞍点函数*/
	{
	int i,j,flag,rmax,k,c;
	i=0;
	flag=0;
	while((i<m) && (!flag))
		{
		rmax=R[i][0];
		c=0;
		for(j=1;j<n;j++)
		if(rmax<R[i][j])	/*找出行中的最大值*/
		{
		rmax=R[i][j];
		c=j;
		}
	flag=1;
	k=0;
	while(k<m && flag)	/*判断行中最大值是否是列中最小值*/
		{
		if(k!=i)
			if(R[k][c]<=rmax)
				flag=0;
		k++;
		}
		if(flag)	/*标记flag为1,表示找到鞍点并输出鞍点值*/
			printf("鞍点是R[%d][%d]:%d\n",i,c,R[i][c]);
		i++;
		}
	if(!flag)
		printf("没有鞍点!\n");
	}
main()
{
int K[m][n],i,j;
for(i=0;i<m;i++)
	for(j=0;j<n;j++)
		scanf("%d",&K[i][j]);
find(K);	/*调用查找鞍点函数*/
}

5.测试数据:设计测试用例,如A[2][3]=(1,2,3,4,5,6,7,8,9);测试结果:3

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读