首页 > 其他分享 >图---基于邻接矩阵表示的广度优先遍历

图---基于邻接矩阵表示的广度优先遍历

时间:2024-12-28 18:00:10浏览次数:5  
标签:Queue 遍历 int Graph void MVNum --- 邻接矩阵 front

6-3 基于邻接矩阵表示的广度优先遍历

实现基于邻接矩阵表示的广度优先遍历。

函数接口定义:

void BFS(Graph G, int v);

其中 G 是基于邻接矩阵存储表示的无向图,v表示遍历起点。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#define MVNum 10
                        
int visited[MVNum];
typedef struct{ 
    char vexs[MVNum];                    
    int arcs[MVNum][MVNum]; 
    int vexnum,arcnum;             
}Graph;
 
void CreateUDN(Graph &G);//实现细节隐藏
void BFS(Graph G, int v);
void BFSTraverse(Graph G){ 
    int v;
    for(v = 0; v < G.vexnum; ++v)  visited[v] = 0;    
    for(v = 0; v < G.vexnum; ++v)
        if(!visited[v])  BFS(G, v); 
}
int main(){
    Graph G;
    CreateUDN(G);
    BFSTraverse(G);
    return 0;
}


/* 请在这里填写答案 */

输入样例:

输入第1行为结点数vexnum和边数arcnum。第2行为结点的值,依次输入arcnum行,每行输入两个结点的值表示该两个结点互为邻接点。

8 8
ABCDEFGH
A B
A C
B D
B E
C F
C G
D H
E H

输出样例:

遍历序列。

A B C D E F G H 

QQ截图20191125133700.png

#include <string.h>

// 队列结构用于BFS
typedef struct {
    int data[MVNum];
    int front;
    int rear;
} Queue;

void InitQueue(Queue *Q) {
    Q->front = Q->rear = 0;
}

int IsEmpty(Queue Q) {
    return Q.front == Q.rear;
}

void EnQueue(Queue *Q, int e) {
    Q->data[Q->rear] = e;
    Q->rear = (Q->rear + 1) % MVNum;
}

int DeQueue(Queue *Q) {
    int e = Q->data[Q->front];
    Q->front = (Q->front + 1) % MVNum;
    return e;
}

void BFS(Graph G, int v)

{
    Queue Q;
    InitQueue(&Q);
    visited[v] = 1;
    printf("%c ", G.vexs[v]);
    EnQueue(&Q, v);

    while (!IsEmpty(Q))

    {
        int current = DeQueue(&Q);
        for (int i = 0; i < G.vexnum; i++)

        {
            if (G.arcs[current][i] == 1 && !visited[i])

            {
                visited[i] = 1;
                printf("%c ", G.vexs[i]);
                EnQueue(&Q, i);
            }
        }
    }
}

标签:Queue,遍历,int,Graph,void,MVNum,---,邻接矩阵,front
From: https://blog.csdn.net/2401_84341430/article/details/144777062

相关文章

  • 实现基于邻接矩阵表示的深度优先遍历
    6-4实现基于邻接矩阵表示的深度优先遍历函数接口定义:voidDFS(GraphG,intv);其中G是基于邻接矩阵存储表示的无向图,v表示遍历起点。裁判测试程序样例:#include<stdio.h>#include<stdlib.h>#defineMVNum10             intvisite......
  • 7-Gin 中自定义控制器 --[Gin 框架入门精讲与实战案例]
    在Gin框架中,"控制器"通常指的是处理HTTP请求的逻辑。虽然Gin本身没有像一些其他框架(例如Django或RubyonRails)那样明确地定义"控制器"的概念,但你可以通过组织代码来实现类似的功能。Gin使用路由组和中间件来帮助组织你的应用程序逻辑。为了创建自定义控制器,你......
  • Python的秘密基地--[章节8] Python 数据科学与机器学习
    第8章:Python数据科学与机器学习随着大数据和人工智能的飞速发展,Python已成为数据科学和机器学习领域的首选编程语言。本章将深入探讨Python在数据科学和机器学习中的核心工具和技术,包括数据处理、可视化以及机器学习模型的构建。8.1数据科学简介8.1.1什么是数据科......
  • 学习012-02-03-14 How to: Reorder an Action Container‘s Actions Collection(如何:对
    Howto:ReorderanActionContainer’sActionsCollection(如何:对操作容器的操作集合进行重新排序)InanXAFapplicationUI,ActionsarelocatedwithinActionContainers.YoucanusetheActionBase.CategorypropertyandtheApplicationModel’sActionDesign......
  • 题目集7-8总结
    前言题目集的知识点、题量、难度1.知识点总结:类的定义与实例化:概念:定义类的属性和方法,创建对象示例:publicclassDevice{privateStringid;}应用:定义各种电气设备类并创建实例继承关系:概念:子类继承父类特征示例:classSwitchextendsDevice应用:所有具体设备......
  • BLOG-3 LYYYY
    第三次pta总结**7-1家居强电电路模拟程序-3**分数100作者蔡轲单位南昌航空大学智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电......
  • 【江协STM32】6-3/4 TIM输出比较、PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机
    1.输出比较简介OC(OutputCompare)输出比较,主要用来输出PWM波输出比较可以通过比较CNT与CCR寄存器(捕获/比较寄存器)值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形CCR:使用输入捕获时,它就是捕获寄存器;使用输出比较时,它就是比较寄存器。在输出比......
  • 学期:2024-2025-1 学号:20241303 《计算机基础与程序设计》第十四周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第十四周作业)这个作业的目标<写上具体方面>《C语言程序设计》第13-14章并完成云班课测试作业正文...本......
  • Bootstrap模态框使用WebUploader点击失效问题 - Bootstrao模态框弹出后内置js函数未起
    解决方案参考: https://blog.csdn.net/superdog007/article/details/78716352webuploader官网: https://fex-team.github.io/webuploader/getting-started.html 问题原因: 模态框弹出后,但是加载的js函数并未执行到html元素,但是F12页面查看元素后又显示正常, 解决: 在模态......
  • 【江协STM32】6-1/2 TIM定时中断、定时器定时中断&定时器外部时钟
    1. TIM定时中断1.1TIM简介TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器(执行计数定时的一个寄存器,每来一个时钟,计数器加1)、预分频器(可以对计数器的时钟进行分频,使计数更灵活)、自动重装寄存器(计数的目标值,就是想要计多少个时钟申......