求一個矩陣的鞍點(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