找鞍点
找鞍点
一、目的
-掌握vector二维数组的创建
-掌握多重循环
二、实验内容与设计思想
找鞍点
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE
题目分析:
看题目可知,代码量大概并不复杂,重点在于如何获得并正确输出值
函数相关伪代码
1.vector<vector<int>>a;
2.cin >> n;
3.for (i = 0; i < n; i++)
|a.push_back(vector<int>());
|for (j = 0; j < n; j++)
||cin >> m;
||a[i].push_back(m);
|for(i = 0; i < n; i++)
||l=a[i][0];
||p=0;
|for (j = 0; j < n; j++)
||if (a[i][j] >= l)
|||l = a[i][j];
|||p = j;
|for (h = 0;h < n;h++)
||if (a[h][p] < l)
|||break;
|if (h == n)
||d = 0;
||cout << i<<" "<<p<<endl;
||break;
4.if (d == 1)
|cout << "NONE";
函数代码
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<vector<int>>a;
int n, m=0, l=0 , j=0, i, p=0, h=0,d=1;
cin >> n;
//vector<vector<int>>a(n);
for (i = 0; i < n; i++)
{
a.push_back(vector<int>());
for (j = 0; j < n; j++)
{
cin >> m;
a[i].push_back(m);
}
}
for(i = 0; i < n; i++)
{
l=a[i][0];
p=0;
for (j = 0; j < n; j++)
{
if (a[i][j] >= l) {
l = a[i][j];
p = j;
}
}
for (h = 0;h < n;h++)
{
if (a[h][p] < l) {
break;
}
}
if (h == n) {
d = 0;
cout << i<<" "<<p<<endl;
break;
}
}
if (d == 1) {
cout << "NONE" ;
}
return 0;
}
三、实验使用环境
以下请根据实际情况编写
- 操作系统:Windows 11专业版
- 编程语言:C++
- 开发工具:[Visual Studio 2022]
四、实验步骤和调试过程
找鞍点
本机运行截图
五、实验小结
遇到的问题及解决方法:
- 问题:使用vector建二维数组运行崩溃
- 解决方法:修改代码
实验体会和收获:
这段代码的目的是在一个给定的矩阵中寻找鞍点,如果存在这样的点,程序将输出其位置;如果不存在,则输出 “NONE”。
程序首先接收用户输入的整数 n,表示二维数组的行数和列数。之后,通过嵌套循环接收用户输入的 n*n 个整数,填充到二维数组中。在这时,如果是用vector定义,如果前面没有定义几行(vector<vector<int>>a(n)),那么在第一层循环中需要循环使用vector再建(a.push_back(vector<int>())。
接下来,程序通过两层嵌套循环遍历二维数组 a 的每个元素。对于每一行,程序首先将该行的第一个元素值赋给变量 l,之后遍历这一行的每个数并判断找出最大值(有相同最大值要最后的位置的列位置p)。
完成行内最大元素的查找后,程序再通过一个循环遍历 p 列的所有元素。如果发现任何元素小于 l,则说明当前行最大元素不是该列的最小元素,程序将跳出循环(提高效率),继续检查下一行。如果遍历完 p 列的所有元素后,没有发现任何元素小于 l,则说明找到了一个马鞍点,程序将输出其行索引 i 和列索引 p,并通过d=0 来标记已找到马鞍点,然后跳出外层循环(因为题目已经确保只有一个鞍点)。
如果外层循环结束,且 d=1,则说明没有找到任何马鞍点,程序将输出 “NONE”。