一個矩陣中的鞍點,鞍點就是在行上最小,在列上最大的元素
這個問題主要還是枚舉所有的數字,首先確定任意一行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