-
题目要求:若矩阵Am*n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
-
关键代码:
void AnDian (int A[][],int m,int n) { int i,j,k; int flag1,flag2; for(i=0;i<m;i++) { for(j=0;j<n;j++) { flag1=1; flag2=1;//假设所有节点均为鞍点 for(k=0;k<n;k++) { if(A[i][j]>A[i][k])//判断是否为当前行最小 flag1=0;//本行中存在比其小的值,故不是鞍点 } for(k=0;k<m;k++) { if(A[i][j]<A[k][j])//判断是否为当前列最大 flag2=0;//本列中存在比其大的值,故不是鞍点 if(flag1 && flag2)//当前行最小,当前列最大 printf("行号:%d 列号:%d = %d\n",i,j,A[i][j]); } } }
-
完整程序
#include <stdio.h> #define MAXSIZE 10 void AnDian (int A[MAXSIZE][MAXSIZE],int m,int n) { int i,j,k; int flag1,flag2; for(i=0;i<m;i++) { for(j=0;j<n;j++) { flag1=1; flag2=1; for(k=0;k<n;k++) { if(A[i][j]>A[i][k])//判断是否为当前行最小 flag1=0; } for(k=0;k<m;k++) { if(A[i][j]<A[k][j])//判断是否为当前列最大 flag2=0; } if(flag1 && flag2)//当前行最小,当前列最大 printf("行号:%d 列号:%d = %d\n",i,j,A[i][j]); } } } int main() { int A[MAXSIZE][MAXSIZE];//6 4 5 1 2 3 3 2 5 int m,n; printf("请输入数组的行数和列数:"); scanf("%d%d",&m,&n); printf("请输入数组的元素:"); for(int i=0;i<m;i++) for(int j=0;j<n;j++) scanf("%d",&A[i][j]); AnDian(A,m,n); }
版权声明:本文为WHISTLE_ZXL原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。