求取矩阵鞍点的算法

作者在 2012-12-31 20:30:43 发布以下内容
/*
*求取矩阵鞍点的算法 
*/ 

#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3 

int main()
{
	int arr[M][N]={1,1,1,3,1,2,1,3,1};
	int flag;                     //鞍点的标志 
	int x,y;                      // 记录鞍点的行号和列号
	int count=0;                  //记录鞍点的个数 
	int temp;
	int i,j,k;
	for(int m=0;m<M;m++)
	   {
	    for(int n=0;n<N;n++)
	    {
	      printf("%4d",arr[m][n]);
	    }
	    printf("\n");
	   }
	      
	for(i=0;i<M;i++)
	{
		temp=arr[i][0];           //找出第i行的最大值,记录其列号y 
		x=i;y=0;
		for(j=1;j<N;j++)
		{
			if(temp<arr[i][j])
			{
			   temp=arr[i][j];
			   y=j;
			}
		}
		flag=1;                    //假设当前点为鞍点 
		for(k=0;k<M;k++)           //判断上述第i行,列号为y的最大值是否为第y列的最小值 
		{                                     //只要有一个符合就不是鞍点,用反面的观点看 
			if(temp>=arr[k][y]&&k!=i)       //取>=以及k!=i可以排除重复元素的影响 
			{
			   flag=0;
			   break;             //跳出是为了后面计数用的 
			}
		}
		
		if(flag==1)
		{ 
		   printf("鞍点是arr[%d][%d]=%d\n",x,y,arr[x][y]);
		   count++;
		}
	}
	
	if(count==0)printf("该矩阵没有鞍点\n");
	else printf("该矩阵有%d个鞍点\n",count); 
	return 0;
	system("pause");
} 
C | 阅读 1588 次
文章评论,共0条
游客请输入验证码
浏览14358次
文章分类