无向图的深度优先遍历和广度优先遍历(递归)

该博客详细介绍了如何使用递归方法实现无向图的深度优先遍历(DFS)和广度优先遍历(BFS)。通过链队结构管理邻接顶点,并在BFS中避免重复元素。提供了完整的C++代码实现,包括`queen.h`和`main.cpp`,用于创建图、输出图、DFS和BFS遍历。
摘要由CSDN通过智能技术生成

无向图的深度优先遍历和广度优先遍历(递归)

 

 

queue.h源代码

注释:包括队列数据类型的定义和相关操作

   (出队,入队,判断队空,判断队列中是否存在某元素)

    int searchQ(LinkQueue &Q,int s) 函数的作用:在将邻接顶点放入队列之前需要先判断队     列中是否已存在此元素,通过查找避免队列中有重复元素。

 

    

#include <iostream>

#include <cstdio>

#include <cstdlib>

#include "queen.h"

 

using namespace std;

 

//李艳娟实验指导书版本改编,文档在‘文档’文件夹中

 

//无向无权图---DFS , BFS

 

#ifndef QUEEN_H_INCLUDED

#define QUEEN_H_INCLUDED

 

 

 

typedef struct Qnode{       //链队结点的类型

 

    int data;

 

    struct Qnode *next;

 

}Qnode,*QueuePtr;

 

 

typedef struct

 

{         //链队指针类型

 

   QueuePtr front;

 

   QueuePtr rear;

 

}LinkQueue;

void InitQueue(LinkQueue &Q)

 

{

 

  Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode));

 

  if(!Q.front) exit(1); //存储分配失败

 

  Q.front->next=NULL;

 

 }

 

 

 

void EnQueue(LinkQueue &Q,int e)

 

{ QueuePtr p;

 

  p=(QueuePtr)malloc(sizeof(Qnode));

 

  p->data=e;

 

  p->next=NULL;

 

  Q.rear->next=p;

 

  Q.rear=p;

 

}

 

 

 

int QueueEmpty(LinkQueue &Q)

 

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值