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

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

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

完整代码如下

程序结果


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


完整代码如下


#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);//输出顶点的出入度
}

程序结果


目录
相关文章
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
725 1
|
算法 开发者 计算机视觉
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
265 0
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
786 10
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
719 1
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
265 1
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
3453 6
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
2205 3
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
1148 5
|
存储 算法 C语言
C语言手撕数据结构代码_顺序表_静态存储_动态存储
本文介绍了基于静态和动态存储的顺序表操作实现,涵盖创建、删除、插入、合并、求交集与差集、逆置及循环移动等常见操作。通过详细的C语言代码示例,展示了如何高效地处理顺序表数据结构的各种问题。
362 1
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
460 0

热门文章

最新文章