当前位置:网站首页>C + + adjacency matrix
C + + adjacency matrix
2020-11-08 23:48:00 【Which studio】


The representation of undirected graph and digraph in adjacency matrix :

Undirected graphs and digraphs are similar , Just take undirected graphs as an example , The code part can be compiled by simple adjustment
Adjacency matrix data type definition
typedef struct{ // The definition of adjacency matrix with weight int Vertices[MaxVertices]; // An array of vertex information int Edge[MaxVertices][MaxVertices]; // An array of edge information int n,e; // Total vertices , Number of edges }AMGraph;
Take the diagram as an example

According to the picture above , We can write the corresponding adjacency matrix :

You can see from this picture that , The diagonals of an undirected graph are divided into two parts Symmetrical to each other Of , By creating adjacency matrix of undirected graph :
void CreateUDN(AMGraph &G) // The generating function of graphs { int i,j,n1,e1,vi,vj,w; printf(" Please enter the number of vertices and edges of the adjacency matrix :\n"); scanf("%d %d",&G.n,&G.e); // Enter the total number of vertex points , The total number of edges n1 = G.n; e1 = G.e; printf(" Please enter the information for each vertex :\n"); for(i=0; i<n1; i++) // Put the vertices in the array { scanf("%d",&G.vexs[i]); // Input the information of the points in turn } for(i=0; i<n1; i++) // Initialization of graphs { for(j=0; j<n1; j++) { if(i=j) { G.arcs[i][j] = 0; // The path from the vertex to itself is 0 } else { G.arcs[i][j] = MaxWeight; // Except for the vertex to itself , The rest are set to the maximum } } } printf("\n"); // Input vertex from 0 Start // for(i=0; i<e1; i++)// {// printf(" Please enter the side information :\n");// scanf("%d %d %d",&vi,&vj,&w);// G.arcs[vi][vj] = w; // Because undirected graphs are symmetric ,a[i][j] = a[j][i]// G.arcs[vj][vi] = w;// } // Input vertex from 1 Start for(i=0; i<e1; i++) { printf(" Please enter the side information :\n"); scanf("%d %d %d",&vi,&vj,&w); G.arcs[vi-1][vj-1] = w; // ① // Because undirected graphs are symmetric ,a[i][j] = a[j][i] G.arcs[vj-1][vi-1] = w; // ② // An undirected graph has the law of symmetry , adopt ①② Realization // Digraphs do not have this property , So you just need to ① }}
The adjacency matrix corresponding to the undirected graph is created , We need to control the format of the output , Make it output as much as possible in the normal handwriting way
void PrintfGraph(AMGraph G) // Output the information of adjacency matrix { int i,j; printf(" The output vertex information is :\n"); for(i=0; i<G.n; i++) { printf("%d\t",G.vexs[i]); } printf("\n The adjacency matrix is :\n"); for(i=0; i<G.n; i++) { printf("\t%d",G.vexs[i]); } for(i=0; i<G.n; i++) { printf("\n%d\t",G.vexs[i]); for(j=0; j<G.n; j++) { if(G.arcs[i][j] == MaxWeight) // When there is no connection between two points, the weight value is the default 32767, But for the convenience of output "∞" { printf("%s\t","∞"); } else printf("%d\t",G.arcs[i][j]); } }}
The complete procedure is as follows :
typedef int VerType;typedef int ArcType;typedef struct{ VerType vexs[MaxVertices]; ArcType arcs[MaxVertices][MaxVertices]; int n,e;} AMGraph;void CreateUDN(AMGraph &G) // The generating function of graphs { int i,j,n1,e1,vi,vj,w; printf(" Please enter the number of vertices and edges of the adjacency matrix :\n"); scanf("%d %d",&G.n,&G.e); // Enter the total number of vertex points , The total number of edges n1 = G.n; e1 = G.e; printf(" Please enter the information for each vertex :\n"); for(i=0; i<n1; i++) // Put the vertices in the array { scanf("%d",&G.vexs[i]); // Input the information of the points in turn } for(i=0; i<n1; i++) // Initialization of graphs { for(j=0; j<n1; j++) { if(i=j) { G.arcs[i][j] = 0; // The path from the vertex to itself is 0 } else { G.arcs[i][j] = MaxWeight; // Except for the vertex to itself , The rest are set to the maximum } } } printf("\n"); // Input vertex from 0 Start // for(i=0; i<e1; i++)// {// printf(" Please enter the side information :\n");// scanf("%d %d %d",&vi,&vj,&w);// G.arcs[vi][vj] = w; // Because undirected graphs are symmetric ,a[i][j] = a[j][i]// G.arcs[vj][vi] = w;// } // Input vertex from 1 Start for(i=0; i<e1; i++) { printf(" Please enter the side information :\n"); scanf("%d %d %d",&vi,&vj,&w); G.arcs[vi-1][vj-1] = w; // ① // Because undirected graphs are symmetric ,a[i][j] = a[j][i] G.arcs[vj-1][vi-1] = w; // ② // An undirected graph has the law of symmetry , adopt ①② Realization // Digraphs do not have this property , So you just need to ① }}void PrintfGraph(AMGraph G) // Output the information of adjacency matrix { int i,j; printf(" The output vertex information is :\n"); for(i=0; i<G.n; i++) { printf("%d\t",G.vexs[i]); } printf("\n The adjacency matrix is :\n"); for(i=0; i<G.n; i++) { printf("\t%d",G.vexs[i]); } for(i=0; i<G.n; i++) { printf("\n%d\t",G.vexs[i]); for(j=0; j<G.n; j++) { if(G.arcs[i][j] == MaxWeight) // When there is no connection between two points, the weight value is the default 32767, But for the convenience of output "∞" { printf("%s\t","∞"); } else printf("%d\t",G.arcs[i][j]); } }}int main(){ AMGraph G; CreateUDN(G); PrintfGraph(G);}
The operation results are as follows :

Adjacency matrix of digraph :

typedef struct{ int vexs[MaxVertices]; int arcs[MaxVertices][MaxVertices]; int n,e;}AMGraph;void CreateGraph(AMGraph &G){ int n,e,i,j,vi,vj,w; printf(" Please enter the total number of vertices and the number of sides :\n"); scanf("%d %d",&G.n,&G.e); n = G.n; e = G.e; printf(" Please enter the information for each vertex :\n"); for(i=0;i<n;i++) { scanf("%d",&G.vexs[i]); } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { G.arcs[i][j] = 0; // The path from the vertex to itself is 0 } else { G.arcs[i][j] = MaxWeight; // Except for the vertex to itself , The rest are set to the maximum } } } printf("\n"); // Input vertex from 0 Start for(i=0;i<e;i++) { printf(" Please enter the side information :\n"); scanf("%d %d %d",&vi,&vj,&w); G.arcs[vi][vj] = w; }// // Input vertex from 1 Start // for(i=0;i<e;i++)// {// printf(" Please enter the side information :\n");// scanf("%d %d %d",&vi,&vj,&w);// G.arcs[vi-1][vj-1] = w;// }}void PrintfGraph(AMGraph G) // Output the information of adjacency matrix { int i,j; printf(" The output vertex information is :\n"); for(i=0; i<G.n; i++) { printf("%d\t",G.vexs[i]); } printf("\n The adjacency matrix is :\n"); for(i=0; i<G.n; i++) { printf("\t%d",G.vexs[i]); } for(i=0; i<G.n; i++) { printf("\n%d\t",G.vexs[i]); for(j=0; j<G.n; j++) { if(G.arcs[i][j] == MaxWeight) // When there is no connection between two points, the weight value is the default 32767, But for the convenience of output "∞" { printf("%s\t","∞"); } else printf("%d\t",G.arcs[i][j]); } }}int main(){ AMGraph G; CreateGraph(G); PrintfGraph(G);}
Running results :

This article is from WeChat official account. - WHICH Studio (which_cn).
If there is any infringement , Please contact the [email protected] Delete .
Participation of this paper “OSC Source creation plan ”, You are welcome to join us , share .
版权声明
本文为[Which studio]所创,转载请带上原文链接,感谢
边栏推荐
- 写时复制集合 —— CopyOnWriteArrayList
- Mycat搭建
- How to deploy pytorch lightning model to production
- JVM真香系列:轻松理解class文件到虚拟机(上)
- Execution of SQL statement
- 信息安全课程设计第一周任务(7条指令的分析)
- Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
- STC转STM32第一次开发
- Concurrent linked queue: a non blocking unbounded thread safe queue
- How to get started with rabbitmq
猜你喜欢

How to reduce the resource consumption of istio agent through sidecar custom resource

Dynamic relu: Microsoft's refreshing device may be the best relu improvement | ECCV 2020

Database design: paradigms and anti paradigms

What are the basic requirements for big data posts?

装饰器(一)

JVM真香系列:轻松理解class文件到虚拟机(上)

c++11-17 模板核心知识(二)—— 类模板

RabbitMQ快速入门详解

几行代码轻松实现跨系统传递 traceId,再也不用担心对不上日志了!

AQS 都看完了,Condition 原理可不能少!
随机推荐
Chapter five
Factory pattern pattern pattern (simple factory, factory method, abstract factory pattern)
Aprelu: cross border application, adaptive relu | IEEE tie 2020 for machine fault detection
Newbe.ObjectVisitor 样例 1
Dynamic relu: Microsoft's refreshing device may be the best relu improvement | ECCV 2020
简单介绍c#通过代码开启或关闭防火墙示例
The road of cloud computing - going to sea - small goal: Hello world from. Net 5.0 on AWS
如何通过Sidecar自定义资源减少Istio代理资源消耗
Pipedrive如何在每天部署50+次的情况下支持质量发布?
SAP S/4HANA 2020安装实录
Realization of file copy
理论与实践相结合彻底理解CORS
Python应用场景多不多?
Copy on write collection -- copyonwritearraylist
Why need to use API management platform
Dynamic ReLU:微软推出提点神器,可能是最好的ReLU改进 | ECCV 2020
云计算之路-出海记-小目标:Hello World from .NET 5.0 on AWS
STC转STM32第一次开发
程序员都应该知道的URI,一文帮你全面了解
[200 interview experience], programmer interview, common interview questions analysis