方阵中的鞍点判断(数组)

在这里插入图片描述在这里插入图片描述

#include <stdio.h>
#include <string.h>
int linemax_column_number(int a[][6],int m,int i);
int columnmin(int a[][6],int m,int j);
int main()
{
int a[6][6];
int m = 0;
int x = 0 ,y = 0;
while ( scanf("%d",&m) != EOF)
{
for(int i = 0;i<m;i++)
{
for(int j = 0;j < m;j++)
{
scanf("%d",&a[i][j]);
}
}//结束读入/
int flag = 0;
for(int i = 0;i<m;i++)
{
if((x = linemax_column_number(a,m,i)) >= 0 && (y = columnmin(a,m,x)) >= 0);//j(max)
{
if(a[i][x] == y )
{
printf("%d %d\n",i,x);
flag = 1;
break;
}
}
}
if(flag == 0)
{
printf("NO\n");
}
}
}
/* 找出各行最大元素所在列,如果唯一,则返回列号
(i行号由实参传入) */
int linemax_column_number(int a[][6],int m,int i)
{ int j=0;
//int linemax = 0;//初始化最大元素为linemax=0,考虑负数的情况,=0,并不保险.宜设为某个输入的元素.
int linemax = a[i][0];
int linemax_column_number = 0;
for( j = 1 ;j<m;j++)
{
if(linemax<a[i][j])//
{
linemax = a[i][j];
linemax_column_number = j;//共享if语句
}
}//
/* 判定行最大元素是否具有唯一性,不唯一则返回-1 */
int maxs = 0;
for(int j = 0 ;j<m;j++)
{
if(linemax == a[i][j]) maxs += 1;
}
if(maxs>1) return -1;
return linemax_column_number;
}
/* 求基于linemax_column_number这一列号所对应列的最小值 */
int columnmin(int a[][6],int m,int j)//列
{
int i = 0;
int columnmin = a[i][j];
//这里的初始化不可过于随意.
for(i = 1;i<m;i++)
{
if (columnmin>a[i][j])//是否偏大
{
columnmin = a[i][j];
}
}
/* 判定最小值是否具有唯一性,若没有,返回-1 */
int mins = 0;
for(int i = 0 ;i<m;i++)
{
if(columnmin == a[i][j]) mins += 1;
}
if(mins>1) return -1;
return columnmin;/* 返回该列唯一的最小值元素(如果有) */
}
posted @   xuchaoxin1375  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示