标题:[求助]二维数组的鞍点
只看楼主
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
结帖率:86.67%
 问题点数:0 回复次数:8 
[求助]二维数组的鞍点

#include<iostream>

#include<iomanip>
using namespace std;
int main()
{
void array_sort(int array[][4]);
int i,j,
a[4][4]={4,2,3,1,5,6,7,8,16,9,10,11,12,13,14,15};
for(i=0;i<4;i++){
for(j=0;j<4;j++)
cout<<setw(8)<<a[i][j];
cout<<endl;
}

array_sort(a);
return 0;
}

void array_sort(int array[][4])
{
int i,j,a,row;
int max1=array[0][0],
max2=array[0][0],
max3=array[0][0];

for(i=0;i<4;i++){
for(j=0;j<4;j++)
if(array[i][j]>max1){
max1=array[i][j];//找出最大那个数
a=j; //记录行数
}
}

max2=array[0][a+1];//以MAX1的行数为列数
for(i=0;i<4;i++){
for(j=0;j<4;j++)
if(array[j][a]<max2){
max2=array[j][a]; //找出这列的最小数;
row=j; //记录该行数 --->这里,为什么保存不到 row=j ??
}
}

max3=array[row][1];//调试这里出错
for(i=0;i<4;i++){
for(j=0;j<4;j++)
if(array[row][j]>max3){ //对比该行,记录最大数
max3=array[row][j];
}
}

cout<<"max1:"<<max1<<endl
<<"max2:"<<max2<<endl
<<"max3:"<<max3<<endl;
if(max2==max3){ /。。。。。。。。对比
cout<<"最高鞍点是"<<max2<<endl;
}
else
cout<<"没有最高鞍点\n";
}



1 2 3 4 ------>4是鞍点

5 6 7 8

9 10 11 12

13 14 15 16


比如:1 先找到16是最大数(max1),然后记录max1在 array[i][j]的 a=j;
2 用array[][a]查找该列的最小数max2
3 在max2该行对比是否该数最大。

大家帮我看下哪错了?
为什么MAX2可以赋值,MAX3就有错误了呢?

题目是:找出一个二维数组的按点,即该位置上的元素在该行最大,在该列上最小的那个数(也可能没有鞍点);

[此贴子已经被作者于2007-7-24 19:34:09编辑过]

搜索更多相关主题的帖子: 鞍点 
2007-07-24 15:37
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 

你的过程似乎烦琐了点,不对吧!
也可能是我没看明白,你能说下你的思路吗?

题目是:找出一个二维数组的按点,即该位置上的元素在该行最大,在该列上最小的那个数(也可能没有鞍点);
可以只在每行搜索最大值,每列搜索最小值,比较就行了啊!


Fight  to win  or  die...
2007-07-24 15:58
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 

改了,不知道能不能表达清楚


2007-07-24 16:15
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
或者你写个我参考下

[此贴子已经被作者于2007-7-24 16:23:30编辑过]



2007-07-24 16:21
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 

[CODE]#include <iostream>
#include <iomanip>
using namespace std;
#define MAX 4
int find(int a[][MAX]){
int max[MAX] = {0},min[MAX] = {0},i,j;

for (i = 0;i < MAX;++i){
int t = a[i][0];
for (j = 0;j < MAX;++j)
if (a[i][j] > t)
max[i] = j;
}

for (i = 0;i < MAX;++i){
int t = a[0][i];
for (j = 0;j < MAX;++j)
if (a[j][i] < t)
max[i] = j;
}

for (i = 0;i < MAX;++i)
if (max[min[i]] == i)
return a[min[i]][i];
return -9999; //不存在
}

int main(){
int a[MAX][MAX],k = 1;
for (int i = 0;i < MAX;++i){
for (int j = 0;j < MAX;++j){
a[i][j] = k++;
cout << setw(8) << a[i][j];
}
cout << endl;
}
cout << find(a) << endl;
return 0;
}[/CODE]

按我的思路写的,你参考下吧!


Fight  to win  or  die...
2007-07-24 16:57
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 

再次感谢


2007-07-24 19:00
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
回复:(aipb2007)[CODE]#include #...

换个数组就不行了
你写那个,全是找的 a[0][max-1] 那里的
但换成这样呢。
1 2 8 4

5 6 7 3 ------> 7是鞍点

9 10 11 12

13 14 16 15


2007-07-24 19:19
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
我的错。第二个for里。

for (i = 0;i < MAX;++i){
int t = a[0][i];
for (j = 0;j < MAX;++j)
if (a[j][i] < t)
max[i] = j; //这里是min[i] = j ;两次循环是copy的,这里就疏忽了,看结果也对就漏掉了
}

Fight  to win  or  die...
2007-07-24 22:57
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
哈哈 不错
谢谢了。

2007-07-24 23:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-157741-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090661 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved