实验六:图的遍历操作及应用

本次实验旨在掌握有向图和无向图的概念,通过邻接矩阵和邻接链表实现图的存储结构。实验中,学生需修复4处逻辑错误,涉及DFS和BFS的遍历操作。错误包括误用DFSM函数、访问标志设置及链表指针错误,修复后程序在VC++环境下成功运行。

一、实验实习目的及要求

运行结果2

目的:掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。


二、实验实习设备(环境)及要求(软硬件条件)

实验在计算机机房,应用软件VC++;


三、实验实习项目、内容与步骤

采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS和BFS操作。本实验给出了示例程序,其中共有4处错误,错误段均有标识,属于逻辑错误。请认真理解程序,修改程序代码,并在电脑上调试运行。


四、实验实习所得结果及分析

1.邻接矩阵作为存储结构的程序示例
(1)此处错误是把DFS改成DFSM,这里是调用DFSM 函数对vi顶点进行遍。很显然遍历函数是DFSM 函数。
(2)此处错误是FALSE改成TRUE.因为这里已经遍历过节点vj,所以需要把此节点访问标志标为已经访问。

2.邻接链表作为存储结构程序示例
(1)此处的错误把DFS改成DFSM,这里的目的是遍历Vj,而函数DFMS才是遍历函数,所以应该用DFSM。
(2)第二处错误是把p=p->next->next,改成p=p->next。这里语句是把P指向下一个地址,而p->next->next指向了下面两个节点了。这样会导致一部分节点没有被搜索到。


运行结果1

五、实验实习结果分析和(或)源程序调试过程

//邻接矩阵作为存储结构的程序示例
#include"stdio.h"
#include"stdlib.h"
#define MaxVertexNum 100     //定义最大顶点数

typedef struct{
   
   
    char vexs[MaxVertexNum];        //顶点表
    int edges[MaxVertexNum][MaxVertexNum]; 
//邻接矩阵,可看作边表
    int n,e;          //图中的顶点数n和边数e
}MGraph;              //用邻接矩阵表示的图的类型

//=========建立邻接矩阵=======
void CreatMGraph(MGraph *G)
{
   
   
     int i,j,k;
     char a;
     printf("Input VertexNum(n) and EdgesNum(e): ");
     scanf("%d,%d",&G->n,&G->e);         //输入顶点数和边数
     scanf("%c",&a);            
     printf("Input Vertex string:");
     for(i=0;i<G->n;i++)   
     {
   
   
		 scanf("%c",&a);

		 G->vexs[i]=a;             //读入顶点信息,建立顶点表
     }

	 for(i=0;i<G->n;i++)
		 for(j=0;j<G->n;j++)
			 G->edges[i][j]=0;    //初始化邻接矩阵
		 printf("Input edges,Creat Adjacency Matrix\n");
		 for(k=0;k<G->e;k++) 
		 {
   
          //读入e条边,建立邻接矩阵 
			 scanf("%d%d",&i,&j);        //输入边(Vi,Vj)的顶点序
			 G->edges[i][j]=1;    
			 G->edges[j][i]=1; //若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句 
     }
}


//=========定义标志向量,为全局变量=======
typedef enum{
   
   FALSE,TRUE} Boolean;
Boolean visited[MaxVertexNum];


//========DFS:深度优先遍历的递归算法======
void DFSM
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pitepa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值