求一个矩阵的鞍点(c语言)


问题重述

求一个矩阵的鞍点(即在行上最大而在列上最小的点)。

算法设计

1)在第一行找最小值,并记录其列号。
2)然后验证其是否为所在列的最大值,如果是,则找到问题的解;
否则,则继续在下一行找最小值 …… 。

1>顶层算法

1 for(i=0;i<n;i=i+1)
2   {     找第i行上最小的元素t及所在列minj;
3         检验t是否第minj 列的最大值,是则输出这个鞍点;}

2>找第i行上最小的元素t及所在列minj

t=a[i][0]; minj=0;
for(j=1;j<n;j=j+1)
    if(a[i][j]<t)
    {   t=a[i][j];
         minj=j;   }

3>检查minj是否是列最大的值,是则输出

for(k=0;k<n;k=k+1)
     if(a[k][minj]>t)   break;
if(k>=n)   print(“the result is a[“,i ,“][” ,minj, “]=”,t);

代码如下:

 1 #include<stdio.h>
 2 #define N 3
 3 
 4 int main(){
 5     int array[N][N]={1,2,3,4,5,6,7,8,9};
 6     int i,j,min,max,k;
 7     
 8     printf("数组有:\n");
 9     for(i=0;i<N;i++)
10     {
11          for(j=0;j<N;j++)
12             printf("%-5d\t",array[i][j]);
13             printf("\n");
14     }
15     for(i=0;i<N;i++){
16         max=array[i][0];
17         for(j=0;j<N;j++){
18             if(max<array[i][j])
19             max=array[i][j];
20             k=j;
21         }
22         min=array[0][k];
23         if(min>array[i][k])
24             min=array[i][k];    
25         if(max==min)
26         printf("\na[%d][%d]=%d",i+1,k+1,array[i][k]);                        
27     }
28 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM