【数据结构】图邻接矩阵的创建完整代码

简介: 【数据结构】图邻接矩阵的创建完整代码

无向图邻接矩阵的创建代码实现

完整代码如下

程序结果


根据图的定义,邻接矩阵的存储需要对顶点和边分别存储。而图的邻接矩阵表示法是一个用一维数组存储顶点信息,用二维数组存储边(弧)的信息。实现这个算法首先要创建无向图,对图进行初始化操作,其次设置三个函数,分别为打印邻接矩阵,判断是否为对称矩阵和打印顶点的出度和入度。具体实现如下所示。


完整代码如下


#include<stdio.h>
#include<malloc.h>
#define maxnumber 6//顶点数目最大值
typedef  struct
{
  char vexs[maxnumber];//顶点表
  int  edges[maxnumber][maxnumber];//邻接矩阵,边表 
  int n,e;//图的顶点数和弧数
}MGraph;
//创建无向图
void CreateMGraph(MGraph *G)
{
  int i,j,k,max=0;
  printf("请输入顶点数和边数(格式:顶点数,边数):\n");
  scanf("%d,%d",&(G->n),&(G->e));
  //图的初始化
  for(i=0;i<G->n;i++)
  {
    printf("请输入第%d个顶点的信息:",i+1);
    scanf("\n%c",&(G->vexs[i]));
  }
  printf("\n");
  for(i=0;i<G->n;i++)
  {
    for(j=0;j<G->n;j++)
      G->edges[i][j]=0;
  }
  printf("请输入每条边对应的两个顶点的序号(格式为:i,j):\n");
  printf("\n");
  //顶点信息存入顶点表
  for(k=0;k<G->e;k++)
  {
    printf("请输入第%d个顶点和边的信息:",k+1);
    scanf("%d,%d",&i,&j);
    G->edges[i][j]=1;
  }
}
//打印邻接矩阵
void print_Matrix(MGraph G)
{
  int i,j;
  printf("\n输出的邻接矩阵为:\n");
  printf("\n");
  for(i=0;i<G.n;i++)      //输出对应的领接矩阵 
  {
    for(j=0;j<G.n;j++)
    {
      printf("%d   ",G.edges[i][j]); 
      if(j==(G.n-1)) 
        printf("\n");    //输出结束 
    }
  }
}
//判断是否为对称矩阵
void check_Matrix(MGraph G)
{
  int i,j,a;
  for(i=0;i<G.n;i++)    //用于判断是否为对称矩阵 
    for(j=0;j<G.n;j++)
    {
      if(G.edges[i][j]==G.edges[j][i])
        a=1;
      else
      {
        a=0;
        break;
      }
    }   
  if(a==1)
    printf("矩阵是为对称矩阵\n");
  else
    printf("矩阵不是为对称矩阵\n");  
}
//输出顶点的出入度
void output_Matrix(MGraph G)
{
  int i,j,cnt,max1,max2,max=0;
  for(i=0,cnt=0;i<G.n;i++)    //用于输出顶点的出度
  {
    for(j=0;j<G.n;j++)
    {
      if(G.edges[i][j]==1)
        cnt++; 
      if(j==(G.n-1))
        printf("%8d的出度为%d\n",i,cnt);
      if(max<cnt)
      {
        max=cnt;
        max1=i;
      }
    }
  }
  printf("%3d的出度最大\n",max1);
  for(j=0,cnt=0,max=0;j<G.n;j++)    //用于输出顶点的入度
  {
    for(i=0;i<G.n;i++)
    {
      if(G.edges[i][j]==1)
        cnt++; 
      if(i==(G.n-1))
        printf("%8d的入度为%d\n",j,cnt);
      if(max<cnt)
      {
        max=cnt;
        max2=i;
      }
    }
  }printf("%d的入度最大\n",max2);
}
void main() 
{
  MGraph G;
  CreateMGraph(&G);//创建无向图
  print_Matrix(G);//打印邻接矩阵
  check_Matrix(G);//判断是否为对称矩阵
  output_Matrix(G);//输出顶点的出入度
}

程序结果


目录
相关文章
|
1月前
|
算法 开发者 计算机视觉
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
31 0
|
4月前
|
算法 安全 大数据
揭秘!Python堆与优先队列:数据结构的秘密武器,让你的代码秒变高效战士!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue提供堆与优先队列功能,助你提升算法效率。堆用于快速找大数据集的第K大元素,如示例所示,时间复杂度O(n log k)。PriorityQueue在多线程中智能调度任务,如模拟下载管理器,按优先级处理任务。掌握这些工具,让代码运行更高效!
70 1
|
14天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
24 1
|
24天前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
26 0
|
29天前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
27 0
|
29天前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
17 0
|
29天前
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
39 0
|
29天前
02(数据结构考研)栈相关操作代码
02(数据结构考研)栈相关操作代码
12 0
|
29天前
01(数据结构考研)线性表相关操作代码
01(数据结构考研)线性表相关操作代码
52 0
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
17 0