博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 — 图 之 广度优先遍历
阅读量:1985 次
发布时间:2019-04-27

本文共 2341 字,大约阅读时间需要 7 分钟。

【描述】:  图的bfs

【输入】:

8
1 2 -1
0 3 4 -1
0 5 6 -1
1 7 -1
1 7 -1
2 7 -1
2 7 -1
3 4 5 6 -1

【输出】:

0 1 2 3 4 5 6 7

/* *图的广度优先遍历 *1.链式队列(链表的头节点中存数据、节点的尾插法、头节点的删除) *2.bfs 8 1 2 -1 0 3 4 -1 0 5 6 -1 1 7 -1 1 7 -1 2 7 -1 2 7 -1 3 4 5 6 -1  */#include
#include
using namespace std;/* 宏定义 */#define MAX_NUM 50#define ElementType int/* 定义动态链式队列节点 */typedef struct QueueNode{ ElementType data; struct QueueNode *next;}QueueNode,*QueuePointer;/* 邻接表表节点 */typedef struct TableNode{ ElementType vertex; struct TableNode *next;}TableNode,*TablePointer;/* 头节点数组 */TablePointer graph[MAX_NUM];/* 定义visited数组 */bool visited[MAX_NUM];/* 顶点数 */int vertices;/* * 动态链式队列 * 1.addq -> 入队 * 2.deleteq -> 出队 *//*在链式队列的队尾插入元素*/void addq(QueuePointer &front, QueuePointer &rear, ElementType item){ QueuePointer temp = new QueueNode; temp->data = item; temp->next = NULL; //插入 if(front){ rear->next = temp; }else{ front = temp; } rear = temp;}/*从链式队列的头部出队*/ElementType deleteq(QueuePointer &front){ QueuePointer temp = front; ElementType item; //出队 item = temp->data; front = temp->next; delete temp; return item;}/* * 邻接表存储的图 * 1.创建图 * 2.bfs *//*创建*/void CreateGraph(){ ElementType ch; TablePointer pnew,qnode; pnew = qnode = NULL; for(int i = 0; i < vertices; i++){ cin>>ch; if(ch == -1) continue; /*当ch 为-1是结束该vertex的创建*/ //链表的头节点 pnew = new TableNode; pnew->vertex = ch; pnew->next = NULL; //将头节点存入 头节点数组 graph[i] = pnew; //尾插法创建链表 cin>>ch; while(ch != -1){ //申请内存、处理数据域、处理指针域 qnode = new TableNode; qnode->vertex = ch; qnode->next =NULL; //插入 pnew->next = qnode; //更新尾指针 pnew = qnode; cin>>ch; } } }/*bfs*/void bfs(ElementType v){ TablePointer w; QueuePointer front, rear; front = rear = NULL; //将第一个节点输入、标记、进队 cout<
<
next){ if(!visited[w->vertex]){ cout<
vertex<<" "; visited[w->vertex] = true; addq(front, rear, w->vertex); } } } cout<
>vertices; CreateGraph(); cout<<"广度优先遍历"<
【运行结果】:

你可能感兴趣的文章
SQL考试常见题目
查看>>
使用Spring Boot写一个简单的Hello World
查看>>
Spring Boot整合Servlet使用
查看>>
SpringBoot 文件上传
查看>>
我居然在Github上找到了一个完整的停车系统(附源码地址)
查看>>
大厂经典面试题:Redis为什么这么快?
查看>>
精通Spring?请吃我一狗腿!
查看>>
培训班老师说可以用这个干掉一大批面试者
查看>>
花了 500块大洋 ,买来的677页Java性能调优笔记,感觉4年Java性能调优都白学了
查看>>
靠这本,在某宝花了399大洋的宝典,熬夜七天,吊打面试官,终进大厂
查看>>
阿里四面,居然栽在一道排序算法上
查看>>
【Java编码规范】《阿里巴巴Java开发手册(正式版)》发布!
查看>>
如何在二三线城市月薪过万(一)看完这篇后端简历优化,包你面试不断
查看>>
源码不止Spring!发布GitHub一天,获赞7.5K 阿里Java程序员源码进修指南我粉了
查看>>
阿里P8大神教你十分钟构建好SpringBoot + SSM框架 成功晋升
查看>>
Linux运维-搭建高可用Redis缓存
查看>>
膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了
查看>>
Java集合:TreeSet、TreeMap、HashSet、HashMap、HashTable、ArrayList、LinkedList、Vector集合的全部比较
查看>>
Linux 常用命令
查看>>
递归及应用
查看>>