寻找最大子方阵
题目描述
给定一个元素为0或1的方阵,编写一个程序,找出其中最大的子方阵,使得该子方阵的元素都是1。程序先提示用户输入矩阵的行数,然后提示用户输入矩阵内容,打印输出最大子方阵的第一个元素的位置以及最大子方阵的行数。假定矩阵最多有100行。下面是样例运行:
Enter the number of rows for the matrix: 5~Enter
Enter the matrix row by row:
10101~Enter
11101~Enter
10111~Enter
10111~Enter
10111~Enter
The maximum square submatrix is at (2,2) with size 3
程序中应实现下面的函数来寻找最大子方阵:
vector
返回值是一个向量,包含3个值,前两个值代表该最大子方阵第一个元素的行标和列标,第三个值表示该最大子方阵的行数。
C++代码 main.cpp
【寻找最大子方阵】没用什么优化算法,暴力解题。
#include
#include using namespace std;
vector findLargestBlock (const vector > &m,int n){
int t = 1;
int i = 0,j = 0,l = 0;
int x = 0,y = 0;
vector result(3,0);
for(l=n;
l>=1;
l--){ //矩阵维数,从最大开始
for(i=0;
i<=n-l;
i++){
for(j=0;
j<=n-l;
j++){
t=1;
for(x=i;
x > m(100,vector(100,0));
cout << "Enter the number of rows for the matrix:";
cin >> n;
cout << "Enter the matrix row by row:" << endl;
int numOfOne = 0;
for (int i = 0;
i < n;
i++){
for (int j = 0;
j < n;
j++){
cin >> m[i][j];
}
}
vector result =findLargestBlock(m,n);
cout << "横坐标:" << result[0] << " 纵坐标:" << result[1] << " 最大子方阵的行数:" << result[2] << endl;
return 0;
}
推荐阅读
- 钛度热评|“i茅台”开启史上最大规模投放,不愁卖的茅台上线电商渠道为哪般?|钛度热评
- 你这辈子千万别败在这句话上
- 广州芭梦笠莎电子商务有限公司怎么样|广州芭梦笠莎电子商务有限公司怎么样 靠谱吗()
- 感动!这位妈妈把自闭症儿子培养成了真实版“雨人”
- 老翁可可蛋糕
- LINUX|【正点原子Linux连载】第五十八章 Linux INPUT子系统实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- LINUX|【正点原子Linux连载】第六十四章 Linux 多点电容触摸屏实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- i.MX6ULL终结者|i.MX6ULL终结者Linux INPUT子系统实验linux自带按键驱动程序
- 孩子行为背后的原因
- 李嘉诚(当你用面子可以赚钱的时候,说明你已经是人物了)