编程基本功——寻找矩阵中的“鞍点”
2010-05-25 08:37
806 查看
一、问题分析
在所在行中最大,在所在列中最小。所以一个矩阵最多只有一个鞍点。所以可以逐行寻找鞍点。先找出某行中最大的元素,再将该元素与同列中其他元素进行比较,若该元素同时是所在列中最小的元素,则它就是鞍点。
二、源码
#include <stdio.h>
int GetSaddlePoint(int *x, int *y, int (*A)[5], int m, int n)
{
int max, i, j, k, flag;
for (i = 0; i < m; ++i)
{
max = 0;
flag = 1;
for (j = 1; j < n; ++j)
{
if (A[i][j] > A[i][max])
{
max = j;
}
}
for (k = 0; k < n; ++k)
{
if (A[i][max] == A[i][k] && max != k)
{
flag = 0;
break;
}
}
if (flag == 1)
{
for (k = 0; k < m; ++k)
{
if (A[k][max] <= A[i][max] && k != i)
{
flag = 0;
break;
}
}
}
if (flag == 1)
{
*x = i;
*y = max;
return 1;
}
}
return 0;
}
int main()
{
int A[5][5], i, j, x, y;
printf("please input some digit into the 5*5 matrix\n");
for (i = 0; i < 5; ++i)
{
for (j = 0; j < 5; ++j)
{
scanf("%d", &A[i][j]);
}
}
if (GetSaddlePoint(&x, &y, A, 5, 5))
{
printf("\n SaddlePoint is (%d , %d)\n", x+1, y+1);
}
else
{
printf("there is no SaddlePoint\n");
}
return 0;
}
相关文章推荐
- 编程基本功——矩阵的转置运算
- 编程基本功——矩阵的乘法运算
- 编程基本功——打印特殊图形
- 编程基本功——判断某天是一年中的第几天
- 编程基本功——C标准文件的读写操作示例
- 编程基本功——打印杨辉三角
- 编程基本功——计算文件的大小
- 编程基本功——计算字符的ASCII码
- 编程基本功——记录程序的运行时间
- 编程基本功——复杂级数的前n项和
- 编程基本功——十进制/二进制转换器
- 编程基本功——指针变量作参数
- 编程之美-快速寻找满足条件的2个数(扩展问题)的一个解法的注释
- 庞果英雄会---寻找直方图中面积最大的矩形---编程挑战
- 编程之美-2.10-寻找数组中的最大值和最小值
- 编程之美-2.11-寻找最近点对
- [转载] 大道至简:软件工程实践者的思想——第一章 编程的精义
- [转载] 大道至简:软件工程实践者的思想——第七章 从编程到工程
- 【编程基本功练习0】zoj 3486
- android开发之java的一些基础知识详解,java编程语法,扎实自己的android基本功