数据结构--实验3--图的操作

Posted zongyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--实验3--图的操作相关的知识,希望对你有一定的参考价值。

  1 #include "stdio.h"
  2 #define  MaxVertexNum 20     //定义图的最大顶点数
  3 #define  MaxEdgeNum  50      //定义图的最大边数
  4 #define  MaxValue  1000      //定义MaxValue为全局整型常量,作为无穷大
  5 typedef  int  VertexType;    //定义图中顶点数据的类型VertexType为整型
  6 typedef  VertexType  vexlist[MaxVertexNum];  //为存储顶点信息的数组类型
  7 typedef  int adjmatrix[MaxVertexNum][MaxVertexNum]; //为存储邻接矩阵的数组类型
  8 int n;    //实际的顶点个数
  9 int e;    //实际的边个数
 10 int visited [ MaxVertexNum ];  //全局数组标记置1表示已经访问,0为未访问
 11 /* 建立图的邻接矩阵
 12 通过从键盘上输入n个顶点信息和e条无向带权边的信息,建立邻接矩阵GA*/
 13 void  Create(vexlist GV,adjmatrix GA,int n,int e)
 14 {
 15     int  i , j, k, w;           
 16     printf ("
  请输入 %d 个顶点数据", n);         //建立顶点数组
 17     for (i=1;  i<=n;  i++)     GV[i]=i; 
 18     for (i=1;  i<=n;  i++)          /*初始化邻接矩阵数组*/
 19     for (j=1;  j<=n;  j++)  
 20         GA[ i ][ j ]=MaxValue;
 21     printf ("输入 %d 条无向带权边
", e);     /*建立邻接矩阵数组*/
 22     for (k=1; k<=e;  k++) 
 23     {
 24         printf("输入第 %d 条边的两端序号及权值(i j W): ",k); 
 25         scanf ("%d%d%d", &i, &j, &w);  
 26         GA[i][j]=GA[j][i]=w;   //置数组中相应对称元素的值为w
 27     }
 28 }
 29 
 30 //邻接矩阵的深度遍历
 31 void dfs(vexlist GV,adjmatrix GA,int i)   // 从顶点i出发的深度遍历
 32 {   int j;
 33     printf("%d,",GV[i]);                      //输出访问顶点
 34     visited[i]=1;                 //全局数组访问标记置1表示已经访问
 35     for(j=1; j<=n; j++)
 36        if ((GA[i][j]!=MaxValue)&&(!visited[j]))
 37     dfs(GV,GA,j);
 38 }
 39 
 40 //邻接矩阵的广度遍历
 41 void  bfs(vexlist GV,adjmatrix GA,int  i)  //从顶点i出发广度遍历
 42 {   int  q[MaxVertexNum] ;                //Q为队列
 43     int  f,r,j ;                 // f,r分别为队列头,尾指针
 44     f=r=0 ;                      //设置空队列
 45     printf("%d,",GV[i]);                // 输出访问顶点
 46     visited[i]=1;                //全局数组标记置1表示已经访问
 47     r++; q[r]=i ;                         //入队列
 48     while (f<r)
 49     {    f++; i=q[f] ;                     //出队列
 50         for (j=1; j<=n; j++)
 51         if ((GA[i][j]!=MaxValue)&&(!visited[j]))
 52           {    printf("%d,",GV[j]);
 53             visited[j]=1 ; 
 54             r++; q[r]=j;
 55         }  
 56      }   
 57 }
 58 
 59 void print(adjmatrix GA)
 60 {
 61 
 62     int i,j;
 63     for(i=1;i<=n;i++)
 64     {
 65         for(j=1;j<=n;j++)
 66 
 67     printf("%d  ",GA[i][j]);
 68     printf("
");
 69     }
 70 
 71 }
 72 
 73 void main()
 74 {
 75     vexlist GV;
 76     adjmatrix GA;
 77     int i,k,j;
 78     do 
 79     {
 80     printf("



");
 81     printf("		      图的邻接矩阵子系统
");
 82     printf("		*****************************
");
 83     printf("		*       1----更 新 图     *
");
 84     printf("		*       2----深度遍历    *
");
 85     printf("		*       3----广度遍历    *
");
 86     printf("		*       0----返  回    *
");
 87     printf("		*****************************
");
 88     printf("		   请选择菜单项(0-3):");
 89     scanf("%d",&k);
 90     switch(k)
 91     {
 92         case 1:
 93             printf ("
请输入图的顶点的个数n= ");
 94                    scanf("%d",&n);                
 95             printf ("请输入图的边个数e= ");
 96                   scanf("%d",&e); 
 97                   Create(GV,GA,n,e);
 98             printf("图的邻接矩阵如下
");
 99             print(GA);
100             break;
101         case 2:
102             for (i=0; i< MaxVertexNum;  i++)       /*标志向量初始化*/
103             visited [i]=0; 
104             printf ("
请输入从图的哪个顶点(1-%d)开始深度遍历:",j);
105              scanf("%d",&j);
106             printf("深度遍历的结果为:");
107               dfs(GV,GA,j);
108             break;
109         case 3:
110             for (i=0; i< MaxVertexNum;  i++)       /*标志向量初始化*/
111               visited [i]=1;
112             printf ("
请输入从图的哪个顶点(1-%d)开始广度遍历:",j);
113               scanf("%d",&j);
114             printf("广度遍历的结果为:");
115              bfs(GV,GA,j);
116             break;
117     }     
118     }while (k!=0);
119 }

 

以上是关于数据结构--实验3--图的操作的主要内容,如果未能解决你的问题,请参考以下文章

数据结构实验报告-实验四 图的构造与遍历

2017-2018-1 20162330 实验四 图的实现与应用

c++实验9 图及图的操作实验

数据结构 图的基本操作实现

神秘的“图”--数据结构

2021.11.14数据结构实验课作业——图的应用(最小生成树和最短路)