图
  • 板块灌水区
  • 楼主I_MUST_AK_IOI
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/19 10:32
  • 上次更新2024/7/19 11:15:06
查看原帖
图
1235700
I_MUST_AK_IOI楼主2024/7/19 10:32

蒟蒻刚学了图,怎么觉得这代码有点怪怪的?

cpp
#include<bits/stdc++.h>
using namespace std;
int g[110][110];
int main()
{
	int m;
	cin>>m; //输入是否有边权。0为无,1为有
	if(m==0)
	{
	int n;
	cin>>n;//输入有几个点。 
	int q;
	cin>>q;//输入有几次操作 。 
	for(int i=1;i<=q;i++)
	{
		int x,y,opt;//输出x,y。以及是否为无向边,1为是,2为不是。 
		cin>>x>>y>>opt;
		if(opt==0)g[x][y]++;//如果不是无向边,则将x到y的边+1。 
		else {
			g[x][y]++;
			g[y][x]++;//如果是无向边,则将x到y的边+1,y到x的边+1。 
		}
    }
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(g[i][j]!=0)cout<<i<<"和"<<j<<"之间有"<<g[i][j]<<"条由"<<i<<"通向"<<j<<"的边\n";//通俗版图的存储。 
		}
	 } 
	 for(int i=1;i<=n;i++)
	 {
	 	for(int j=1;j<=n;j++)
	 	{
	 		cout<<g[i][j]<<" ";//数组版图的存储。
		 }
		 cout<<endl;
	 }
    }
    else {
	int n;
	cin>>n;//输入有几个点。 
	int q;
	cin>>q;//输入有几次操作 。 
	for(int i=1;i<=q;i++)
	{
		int x,y,opt,z;//输出x,y。以及是否为无向边,1为是,2为不是。以及边权z。
		cin>>x>>y>>opt>>z;
		if(opt==0)g[x][y]+=z;//如果不是无向边,则将x到y的边+z。 
		else {
			g[x][y]+=z; 
			g[y][x]+=z;//如果是无向边,则将x到y的边+z,y到x的边+z。 
		}
    }
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(g[i][j]!=0)cout<<i<<"和"<<j<<"之间有一条由"<<i<<"通向"<<j<<"的权值为"<<g[i][j]<<"的边\n";//通俗版图的存储。 
		}
	 } 
	 for(int i=1;i<=n;i++)
	 {
	 	for(int j=1;j<=n;j++)
	 	{
	 		if(g[i][j]!=0)cout<<g[i][j]<<" ";//数组版图的存储。 
	 		else cout<<1e9<<" ";
		 }
		 cout<<endl;
	 }
    }
	return 0;
 } 
2024/7/19 10:32
加载中...