计算01矩阵中1的个数并显示其行与列位置(C)

在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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工科小废材

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值