在01矩阵中(最大5000&5000,可自行修改N进行调整),寻找1的位置只需要将整个二维数组全部if检测是否等于1即可
可读取对应格式的txt文件并生成两个分别装有每一行1的个数以及这些1所在哪一列和每一列1的个数以及这些1所在哪一行
举例:
输入txt:
4*4矩阵(此时代码中的Hmatrix.txt更改为test.txt)
输出txt:
row_weight中的数字表示第一行存在2个1,在第1和第3列两个位置上,第二行开始也同理,两个1,在第2和第4列的位置上
column_weight中的数字表示第一列存在2个1,在第1和第3行,第二列存在2个1,在第2和第3行
将代码中带in的代码屏蔽,使用cin,将带ofs的代码屏蔽,使用cout可不对txt进行读取创建,可直接在运行过程中输入矩阵并得到结果(如下图)
代码如下
/*针对txt文件进行矩阵读取与权重计算,在使用时对同目录的
txt文件内的矩阵长宽以及矩阵内的数据进行读取,输出为txt
格式,要更改为手动输入则将所有带 in>> 以及 ofs 的代码
屏蔽,使用cin以及cout代码。
工科小废材*/
#include<bits/stdc++.h>
#include<fstream>
#include<iostream>
using namespace std;
const int N=5000;
int n,m;
int a[N][N];
int f[N];
int main()
{
int b[2];
ifstream in("Hmatrix1.txt"); //读取txt文本,可修改为同一目录下的txt文件
int i,j;
//cin>>n>>m;
in>>n>>m; //txt文本前两个数给矩阵大小
int g;
int numH=0;
for (int i = 0;i < n;i ++)
{
for (int j = 0;j < m;j ++)
//cin >> a[i][j];
in >> a[i][j]; //txt文本第三个数开始给矩阵赋值
}
cout<<endl;
ofstream ofs;
ofs.open("row_weight",ios::out ); //此处创建一个txt文件用于记录每一行有几个1
for(int x=0;x<n;x++)
{
//此处打开txt文件(不一定要有,如果要在已存在的txt文件写入就要添加代码)
g=0;
for(int y=0;y<m;y++)
{
if(a[x][y]==1)
{
g=g+1;
f[g]=y+1;
}
}
if(g!=0)
{
//cout<<g<<" ";
ofs<<g<<" ";
}
if(g==0)
{
//cout<<0<<endl;
ofs<<0<<endl;
}
for(int num=1;num<=g;num++)
{
//cout<<f[num]<<" ";
ofs<<f[num]<<" ";
}
//cout<<endl;
ofs<<endl;
//此处关闭txt文件
}
ofs<<endl;
ofs.close();
//cout<<endl;
ofs.open("column_weight",ios::out ); //此处创建一个txt文件用于记录每一列有几个1
for(int y=0;y<m;y++)
{
//此处打开txt文件(同上,不一定要)
g=0;
for(int x=0;x<n;x++)
{
if(a[x][y]==1)
{
g=g+1;
f[g]=x+1;
}
}
if(g!=0)
{
//cout<<g<<" ";
ofs<<g<<" ";
}
if(g==0)
{
//cout<<0<<endl;
ofs<<0<<endl;
}
for(int num=1;num<=g;num++)
{
//cout<<f[num]<<" ";
ofs<<f[num]<<" ";
}
//cout<<endl;
ofs<<endl;
//此处关闭txt文件
}
ofs<<endl;
ofs.close();
//cout<<endl;
return 0;
}