当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
猜你喜欢
Five design patterns frequently used in development
Factory pattern pattern pattern (simple factory, factory method, abstract factory pattern)
Using annotation + interceptor to implement asynchronous execution
SQL语句的执行
Why need to use API management platform
Fiddler can't grab requests from browsers like Google_ Solution
平台商业化能力的另一种表现形式SAAS
C/C++编程笔记:指针篇!从内存理解指针,让你完全搞懂指针
移动大数据自有网站精准营销精准获客
LeetCode-11:盛水最多的容器
随机推荐
leetcode之反转字符串中的元音字母
android开发中提示:requires permission android.permission write_settings解决方法
Core knowledge of C + + 11-17 template (2) -- class template
第五章编程
VIM Introduction Manual, (vs Code)
对象
Have you ever thought about why the transaction and refund have to be split into different tables
当我们聊数据质量的时候,我们在聊些什么?
RabbitMQ快速入门详解
Computer network application layer
How to make scripts compatible with both Python 2 and python 3?
Are there many Python application scenarios?
Factory pattern pattern pattern (simple factory, factory method, abstract factory pattern)
Fiddler can't grab requests from browsers like Google_ Solution
简单介绍c#通过代码开启或关闭防火墙示例
Five phases of API life cycle
Realization of file copy
Decorator (1)
数据库设计:范式与反范式
使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?