二维数组寻找鞍点算法思想:
1、对二维数组遍历,拿每一行的第一个元素作为比较的元素;
2、如果该元素大于这一行的所有元素,遍历这一元素所在列中的元素并比较;
3、如果该元素小于所有元素,那么就找到了一个鞍点。
C语言实现如下:
#include <stdio.h> #define m 3 #define n 3 int a[3][3]={{1,1,8},{3,1,7},{1,4,6}}; int i,j; int temp1=0,temp2=0; int row,col; int k; int flag; void find(int a[m][n]){ for(i=0;i<m;i++){ for(j=0;j<n;j++){ if(a[i][0]<a[i][j]){//寻找行中最大值 temp1=a[i][j];//将最大值赋给中间变量temp1 row=i;//记录下行号 col=j;//记录下列号 } } for(k=0;k<m;k++){ if(a[k][col]<temp1){ break; }else { if(k==m-1){//结束判断 printf("当前鞍点是:%d\n", a[row][col]); flag++; } } } } if(flag==0){ printf("当前%d行没有鞍点\n",i+1 ); }else { printf("有%d个鞍点\n", flag); } } int main(){ int count=0; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ printf("%d\t", a[i][j]); count++; if(count%3==0){ printf("\n"); } } } find(a); }
运行结果:
1 1 8 3 1 7 1 4 6 当前鞍点是:6 有1个鞍点