一个矩阵中的鞍点,鞍点就是在行上最小,在列上最大的元素
这个问题主要还是枚举所有的数字,首先确定任意一行i(0<=i<=n-1行),然后确定列号(也就是说在这一行中它是最小元素的列号)。
示例代码:
minj=0;
for(j=1;j<n;j++)
{
if(t>array[i][j]) //找到在固定行号i下最小数据的列号。
{
t=array[i][j];
minj=j;
}
}
确定了列号minj后,但它不一定是这个列的最大的元素,所以还要检查是否符合鞍点的条件。
示例代码:
for(k=0;k<n;k++)
{
if(t<array[k][minj]) //检查这个最小的行号是否在【0:n-1】 列里面是最大的!
{
break; //不是的话就退出循环。
}
}
if(k<n)
{
continue; //继续找其他的满足条件的元素!
}
然后在外面嵌套一个大的循环即可以求出所以的鞍点!完整代码如下:
1 /*
2 Name: 求矩阵鞍点
3 Copyright: CopyLeft
4 Author: Lonelytree
5 Date: 21-09-08 18:55
6 Description: 求一个矩阵中的鞍点,鞍点就是在行上最小,在列上最大的元素!
7 */
8
9 #include<stdio.h>
10 void readmtr(int array[][10],int num); // num*num
11
12 int main()
13 {
14 int array[10][10];
15 int i,j,k,minj,t;
16 int n,flag;
17 n=10,flag=0;
18 readmtr(array,n); //向数组中读入数据
19 /*printfmtr(array,n);*/ //打印数组中的数据
20 for(i=0;i<n;i++)
21 {
22 t=array[i][0];
23 minj=0;
24 for(j=1;j<n;j++)
25 {
26 if(t>array[i][j]) //找到在固定行号i下最小数据的列号。
27 {
28 t=array[i][j];
29 minj=j;
30 }
31 }
32 for(k=0;k<n;k++)
33 {
34 if(t<array[k][minj]) //检查这个最小的行号是否在【0:n-1】 列里面是最大的!
35 {
36 break; //不是的话就退出循环。
37 }
38 }
39 if(k<n)
40 {
41 continue; //继续找其他的满足条件的元素!
42 }
43 printf("array[%d][%d]=%d\n",i,minj,array[i][minj]);
44 flag=1;
45 }
46 if(flag==0)
47 {
48 printf("No solutinue!\n");
49 }
50 system("PAUSE");
51 return 0;
52 }
53
54 void readmtr(int array[][10],int num) // num*num
55 {
56 int i,j;
57 for(i=0;i<num;i++)
58 {
59 for(j=0;j<num;j++)
60 {
61 scanf("%d",&array[i][j]);
62 }
63 }
64 }
65
66
67
68
69