图的邻接矩阵存储实现无向图,有向图,无向网,有向网的存储;并且可求解任意顶点的度(入度或出度),可输出任意两个顶点之间的关系(是否邻接或其权值))的C++代码
时间: 2023-06-25 09:07:28 浏览: 111
以下是图的邻接矩阵存储实现无向图,有向图,无向网,有向网的存储,并且可求解任意顶点的度(入度或出度),可输出任意两个顶点之间的关系(是否邻接或其权值)的C++代码:
```c++
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=1e9;
const int maxn=105;
int n,m;//n为节点数,m为边数
int G[maxn][maxn];//邻接矩阵存储图
int d[maxn];//记录每个节点的度数
void init()//初始化
{
memset(G,0,sizeof(G));
memset(d,0,sizeof(d));
}
void add_edge(int u,int v,int w)//加边操作
{
G[u][v]=w;
d[u]++;
}
void print_graph()//输出图
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(G[i][j])
{
printf("(%d,%d):%d ",i,j,G[i][j]);
}
}
printf("\n");
}
}
void print_degree(int u)//输出节点u的度数
{
printf("节点%d的度数为%d\n",u,d[u]);
}
void print_relation(int u,int v)//输出节点u和节点v之间的关系
{
if(G[u][v])
{
printf("%d和%d邻接,权值为%d\n",u,v,G[u][v]);
}
else
{
printf("%d和%d不邻接\n",u,v);
}
}
int main()
{
init();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add_edge(u,v,w);
add_edge(v,u,w);//如果是无向图或无向网,需要加上这句话
}
print_graph();
print_degree(1);
print_relation(1,2);
return 0;
}
```
其中,add_edge函数实现加边操作,print_graph函数输出图,print_degree函数输出节点u的度数,print_relation函数输出节点u和节点v之间的关系。
阅读全文