图子系统

图子系统

1.实验目的

(1)掌握图邻接矩阵的存储方法。

(2)掌握图深度优先遍历的基本思想。

(3)掌握图广度优先遍历的基本思想。

2.实验内容

(1)编写按键盘输入的数据建立图的邻接矩阵存储。

(2)编写图的深度优先遍历函数。

(3)编写图的广度优先遍历函数。

(4)设计一个选择式菜单如下:

 

                              图  子  系  统               

           **************************************************

            *          1---------更新邻接矩阵                * 

            *          2---------深度优先遍历                * 

            *          3---------广度优先遍历                *

            *          0---------退       出                    *  

            **************************************************

   请选择菜单号(0---3):     

 

附C源程序如下:

  1 #include <stdio.h>
  2 #define GRAPHMAX 10
  3 #define Queuesize 30
  4 
  5 typedef struct
  6 {  char vexs[GRAPHMAX];
  7    int edges[GRAPHMAX][GRAPHMAX];
  8    int n,e;
  9 }MGraph;
 10 
 11 int visited[10];
 12 
 13 void CreateMGraph(MGraph *G);
 14 
 15 void DFSTraverseM(MGraph *G);
 16 void DFSM(MGraph *G,int i);
 17 
 18 void BFSTraverseM(MGraph *G);
 19 void BFSM(MGraph *G,int k);
 20 
 21 typedef struct
 22 {  int front;
 23    int rear;
 24    int count;
 25    int data[Queuesize];
 26 }CirQueue;
 27 
 28 void InitQueue(CirQueue *Q)
 29 {  Q->front=Q->rear=0;
 30    Q->count=0;
 31 }
 32 
 33 int QueueEmpty(CirQueue *Q)
 34 {
 35    return Q->count==0;
 36 }
 37 
 38 int QueueFull(CirQueue *Q)
 39 {
 40    return Q->count==Queuesize;
 41 }
 42 
 43 void EnQueue(CirQueue *Q,int x)
 44 {
 45    if(QueueFull(Q))
 46       printf("Error! Queue overflow.");
 47    else
 48    {  Q->count++;
 49       Q->data[Q->rear]=x;
 50       Q->rear=(Q->rear+1)%Queuesize;
 51    }
 52 }
 53 
 54 int DeQueue(CirQueue *Q)
 55 {  int temp;
 56    if (QueueEmpty(Q))
 57    {  printf("Error! Queue underflow.");
 58       return NULL;
 59    }
 60    else
 61    {  temp=Q->data[Q->front];
 62       Q->count--;
 63       Q->front=(Q->front+1)%Queuesize;
 64       return temp;
 65    }
 66 }
 67 
 68 void main() 
 69 {  MGraph *G,a;  //定义a 为一个MGraph 类型结构变量,则 a 的存储单元就确定下来
 70    char ch1;
 71    int ch2;
 72    G=&a;
 73 
 74    printf("\n\t\t 建立一个图的邻接矩阵存储结构:\n");
 75    CreateMGraph(G);
 76    
 77 
 78    getchar();
 79    ch1='y';
 80    while (ch1=='y'|| ch1=='Y')
 81   {
 82      printf("\n");
 83      printf("\n\t\t                   图  子  系  统                 ");
 84      printf("\n\t\t**************************************************");
 85      printf("\n\t\t*          1---------更新邻接矩阵                *");  
 86      printf("\n\t\t*          2---------深度优先遍历                *");  
 87      printf("\n\t\t*          3---------广度优先遍历                *");  
 88      printf("\n\t\t*          0---------退        出                *");      
 89      printf("\n\t\t**************************************************");
 90      printf("\n\t\t   请选择菜单号(0---3):            ");
 91      scanf("%d",&ch2);
 92      getchar();
 93      switch(ch2)
 94      {   case 1:
 95                CreateMGraph(G);
 96                printf("\n\t\t 图的邻接矩阵存储结构建立完毕.");
 97                break;
 98          case 2:
 99                DFSTraverseM(G);
100                break;
101          case 3:    
102                  BFSTraverseM(G);
103                break;  
104          case 0:
105                ch1='n';
106                break;
107          default:
108                printf("\n\t\t 输入错误!请重新输入  ");
109      }
110   }
111 }
112 
113 
114 void CreateMGraph(MGraph *G)  //建立图的邻接矩阵存储
115 { int i,j,k;
116   char ch1,ch2;
117 
118   printf("\n\t\t 请输入顶点数,边数并按回车(格式如:3,4):");
119   scanf("%d,%d",&(G->n),&(G->e));  //输入顶点数,边数
120 
121   for (i=0; i<G->n; i++) //输入各顶点符号
122   { 
123      getchar();
124      printf("\n\t\t 请输入第 %d 个顶点并按回车:  ",i+1);
125      scanf("%c", &(G->vexs[i]));
126   }
127   
128   for(i=0; i<G->n; i++)
129      for(j=0; j<G->n; j++)
130          G->edges[i][j]=0;
131 
132   for(k=0;  k<G->e; k++)
133   {  getchar();
134      printf("\n\t\t 请输入第 %d 条边的顶点符号(格式为:顶点符号,顶点符号):",k+1);
135      scanf("%c,%c",&ch1,&ch2);
136      for(i=0;ch1!=G->vexs[i];i++);
137      for(j=0;ch2!=G->vexs[j];j++);
138      G->edges[i][j]=1;
139   }
140 
141   printf("\n\t\t 已建立一个图的邻接矩阵存储结构!现输出此邻接矩阵如下:\n");
142   for(i=0; i<G->n; i++)  //输出此邻接矩阵
143   {  printf("\n\t\t");
144      for(j=0; j<G->n; j++)
145         printf("%5d",G->edges[i][j]);
146   }
147 
148 }
149 
150 void DFSTraverseM(MGraph *G) //深度优先遍历
151 { int i;
152   for(i=0; i<G->n; i++)
153       visited[i]=0;
154 
155   for(i=0; i<G->n; i++)
156       if(!visited[i])
157           DFSM(G,i);
158 }
159 
160 void DFSM(MGraph *G,int i)  
161 { int j;
162   printf("\n\t\t 深度优先遍历序列:%c\n", G->vexs[i]);
163   visited[i]=1;
164   for(j=0; j<G->n; j++)
165      if( G->edges[i][j]==1 && !visited[j])
166         DFSM(G,j); // 递归调用DFSM(),直到没有未被访问的相邻顶点,则访问后返回到上一层
167 }
168 
169 void BFSTraverseM(MGraph *G)
170 { int i;
171   for(i=0; i<G->n; i++)
172       visited[i]=0;
173 
174   for(i=0; i<G->n; i++)
175       if(!visited[i])
176         BFSM(G,i);
177 }
178 
179 void BFSM(MGraph *G, int k)
180 { int i,j;
181   CirQueue Q; //定义 Q 为一个循环队列结构变量
182 
183   InitQueue(&Q);
184 
185   printf("\n\t\t  广度优先遍历序列:  %c\n", G->vexs[k]);  //访问此顶点
186   visited[k]=1;  // 将该顶点的访问标志置为已访问
187   EnQueue(&Q,k);  // 将该顶点的序号进对
188   
189   while( !QueueEmpty(&Q) )
190   {  i=DeQueue(&Q); //已访问顶点的序号从对首出对
191      for(j=0; j<G->n; j++)
192        if( G->edges[i][j]==1 && !visited[j] )  //如果 j 是 i 的邻接点并且 j 未被访问过
193        {  printf("\n\t\t  广度优先遍历序列:  %c\n", G->vexs[j]); 
194           visited[j]=1;
195           EnQueue(&Q,j); // j 被访问后进对尾
196        }
197   }
198 }

 

转载于:https://www.cnblogs.com/daipianpian/p/4501561.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 智能化弱电系统CAD纸是一种用于电子工程设计的软件工具。它可以帮助设计师快速地绘制出电子设备的设计,同时可以方便地对设计进行修改和优化。 智能化弱电系统CAD纸具备智能化、自动化的特点,可以帮助用户进行CAD设计的各种操作,自动识别设备案,快速绘制线路和电路板形,并能够自动分析和检测形的各种问题,为设计过程提供数据支持。这种软件还可以与其他软件集成,比如EDA标准软件,从而在设计和测试方面更加具有优势。 在智能化弱电系统CAD纸的应用过程中,需要使用各种形符号和电子元器件的数据库。设计师可以在库中找到需要的元器件和符号,从而快速绘制纸。同时,CAD软件还可以支持各种通信协议,与传感器、计算机、移动设备等进行数据交互,从而使得智能化弱电系统CAD纸更加具备实用性和高效性。 总之,智能化弱电系统CAD纸是一种非常优秀的软件工具,它在电子设备设计和调试方面具有非常重要的作用,可以大大提高设计效率和质量,使得电子设备设计更加智能化、高效化和自动化。 ### 回答2: 智能化弱电系统CAD纸是指利用计算机辅助设计软件制作出来的智能化弱电系统的纸。智能化弱电系统是一个由各种智能化设备组成的电子系统,随着科技进步,智能化弱电系统已成为现代建筑必备的一部分。 CAD纸是制作智能化弱电系统纸的主要工具。通过CAD软件,设计人员可以方便地创建、修改和打印CAD纸,从而快速地制作出智能化弱电系统的纸。 智能化弱电系统CAD纸需要包括建筑平面、弱电布线、配线、设备安装等多种元素,以便于设计师和工程师快速了解系统的运作方式和实现方法。此外,CAD纸还需要考虑到节省空间、人性化、安全性等方面的因素,以使得整个系统的布置更加合理。 总之,智能化弱电系统CAD纸的制作不仅需要具备设计师和工程师的专业知识,还需要掌握一定的计算机技术和软件应用。通过制作出精细的CAD纸,可以更好地保证智能化弱电系统的设计和建设质量,实现更好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值