计算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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在邻接矩阵,出度是指从某个顶点出发的边的数量,入度是指指向某个顶点的边的数量。根据引用\[2\]的代码,我们可以计算出每个顶点的出度和入度。在代码,使用一个二维数组e来表示邻接矩阵,其e\[i\]\[j\]的值为1表示存在一条从顶点i到顶点j的边。 首先,我们需要输入顶点的个数n和边的个数m。然后,使用一个循环来读取每条边的起点u和终点v,并将e\[u-1\]\[v-1\]的值设为1,表示存在一条从顶点u到顶点v的边。 接下来,我们可以计算每个顶点的出度和入度。使用两个循环,外层循环遍历每个顶点i,内层循环遍历每个顶点j。在内层循环,我们累加e\[i\]\[j\]的值来计算顶点i的出度,累加e\[j\]\[i\]的值来计算顶点i的入度。 最后,我们输出每个顶点的出度和入度。根据引用\[2\]的代码,我们可以按照题目要求的格式输出结果。 综上所述,我们可以使用邻接矩阵计算每个顶点的出度和入度。 #### 引用[.reference_title] - *1* *3* [图论:出、入度,邻接表、邻接矩阵、拓扑排序\207. Course Schedule](https://blog.csdn.net/c602273091/article/details/55511145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [有向图各点的出度和入度](https://blog.csdn.net/Chuck_0430/article/details/9721449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

工科小废材

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

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

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

打赏作者

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

抵扣说明:

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

余额充值