c++只用for找出二维数组的鞍点
时间: 2023-10-27 07:07:08 浏览: 108
好的,以下是只使用for循环找出二维数组鞍点的C++代码示例:
```c++
#include<iostream>
using namespace std;
const int MAX = 100;
int main() {
int n, m;
int a[MAX][MAX];
int row[MAX], col[MAX]; // 存储行最大值和列最小值的下标
int flag[MAX]; // 标记是否为鞍点
cin >> n >> m;
for(int i = 0; i < n; i++) {
row[i] = 0;
for(int j = 0; j < m; j++) {
cin >> a[i][j];
if(a[i][j] > a[i][row[i]]) {
row[i] = j; // 找到行最大值的下标
}
}
}
for(int j = 0; j < m; j++) {
col[j] = 0;
flag[j] = 1; // 先假设每个元素都是鞍点
for(int i = 0; i < n; i++) {
if(a[i][j] < a[col[j]][j]) {
col[j] = i; // 找到列最小值的下标
}
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(row[i] == j && col[j] == i) {
flag[j] = 0; // 标记为非鞍点
cout << i << ' ' << j << endl; // 输出鞍点的位置
}
}
}
bool has_ans = false;
for(int j = 0; j < m; j++) {
if(flag[j] == 1) {
has_ans = true;
break;
}
}
if(has_ans == false) {
cout << "no answer" << endl;
}
return 0;
}
```
该代码与之前的代码相似,只是使用了int类型的flag数组来代替bool类型。在标记鞍点时,我们把每个元素的标记设为1,表示它可能是鞍点。如果一个元素不是鞍点,我们将该元素的标记设为0。在最后的for循环中,我们使用flag数组来判断是否存在鞍点。
阅读全文