c語言尋找矩陣鞍點
阿新 • • 發佈:2019-02-12
尋找一個方形矩陣的鞍點(該位置上的元素在該行最大,在該列最小)
先找出矩陣每一行的最大值,在依次判斷該行最大值是否為該列最小值。
#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("沒有鞍點");
}
}