蒟蒻刚学了图,怎么觉得这代码有点怪怪的?
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;
}