1. 程式人生 > >c語言尋找矩陣鞍點

c語言尋找矩陣鞍點

  • 尋找一個方形矩陣的鞍點(該位置上的元素在該行最大,在該列最小)

  • 先找出矩陣每一行的最大值,在依次判斷該行最大值是否為該列最小值。

#include<stdio.h>
int main()
{
 int a[5][5];
 int b[5];
 int i,j,t;
 int flag = 0;//用於標示陣列b中是否存在不是-1的元素
 printf("輸入一個5*5二維陣列:\n");
 for(i=0;i<5;i++){
       scanf("%d %d %d %d %d",&a[i][0],&a[i][1],&a[i][2],&a[i][3
],&a[i][4]); } //找出每一行中最大的元素,並把列號存在陣列b中 for(i=0;i<5;i++) { //預設每一行第一個元素為最大值 b[i] = a[i][0]; //引入一個迴圈變數t用來記錄最大值的列號 t = 0; //把最大值的數值暫時存在b中,把最大值的列號暫時存在t中 for(j=0;j<5;j++){ if(b[i]<a[i][j]){ b[i] = a[i][j]; t = j; } } //如果一行中有兩個相同的最大值,t等於-1
for(j=0;j<5;j++){ if(b[i]==a[i][j]&&j!=t){ t = -1; } } //把最大值的列號存在b中 b[i] = t; } for(i=0;i<5;i++){ if(b[i]!=-1){ for(j=0;j<5;j++){ if(a[i][b[i]]>a[j][b[i]]) { b[i] = -1; } else
if(a[i][b[i]]==a[j][b[i]]&&i!=j){ b[i] = -1; } } } } for(i=0;i<5;i++){ if(b[i]!=-1){ flag = 1; printf("鞍點為:a[%d][%d]\n",i,b[i]); } } if(flag==0){ printf("沒有鞍點"); } }