首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

矩阵的鞍点 求见教

2013-04-21 
矩阵的鞍点求指教问题描述给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最小

矩阵的鞍点 求指教
问题描述

给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最小数,第j列上的最大数。一个矩阵A也可能没有鞍点。 你的任务是找出A的鞍点。


输入
输入文件的第1行是一个整数T,(1<=T<=20),表示下面有T个矩阵。接下来是T个矩阵的描述。每一个矩阵A由若干行组成,第1行上是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个元素之间有一个或多个空格。两个矩阵描述之间空一行。
输入直到文件结束。
输出
对输入文件中的T个矩阵,输出“YES”或“NO”,如果一个矩阵A有鞍点,那么输出“YES”,否则输出“NO”。

输入样例
2
5
1 6 87 78 89
2 7 45 94 65
3 8 98 34 88
4 9 65 67 50
5 10 3 5 49

2
1 4
2 3

输出样例
NO
YES
下面是我写的代码,不知道哪里错了?
#include<stdio.h>


int main()
{

int a[100][100],max;
int T,n,i,j,maxj,k,flag1=1,flag2=0;

scanf("%d",&T);

for(i=0;i<T;i++){
scanf("%d",&n);

for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);

printf("\n\n");

for(i=0;i<n;i++){
max=a[i][0];
for(j=0;j<n;j++){
if(a[i][j]<max){
max=a[i][j];
maxj=j;
}
else 
maxj=0;
for(k=0,flag1=1;k<n&&flag1;k++){
if(max<a[k][maxj])
flag1=0;
}
if(flag1==1){
printf("\nYES\n ");
flag2=1;break;
}
}
if(flag1==1) break;
    
}
if(flag2==0)printf("NO\n");
}

  
   return 0;
}

[解决办法]
http://topic.csdn.net/u/20100120/20/7D2F8C02-B457-44A7-9E39-67170F11A614.html

热点排行