BFS广度优先

news2025/7/28 0:45:02

题目描述如下:
使用邻接矩阵实现BFS:

请添加图片描述

输入
8,10
1
2
3
4
5
6
7
8
1,2
1,5
2,6
3,6
3,4
3,7
4,7
4,8
6,7
7,8
2
输出
请输入顶点数和边数:请输入顶点本身的数据:
请输入边的数据:
0 1 0 0 1 0 0 0
1 0 0 0 0 1 0 0
0 0 0 1 0 1 1 0
0 0 1 0 0 0 1 1
1 0 0 0 0 0 0 0
0 1 1 0 0 0 1 0
0 0 1 1 0 1 0 1
0 0 0 1 0 0 1 0
输入BFS遍历的起始结点:2 1 6 5 3 7 4 8

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
//#include <iostream>
#define MAX_VERTICES 100 //假设图有100个顶点
#define MAX_WEIGHT 32767 //加权图(网)不邻接时为10000,但输出为“∞”
#define Maxsize 100

typedef struct
{
	int Vertices[MAX_VERTICES]; //顶点信息的数组
	int AdjacencyMatrix[MAX_VERTICES][MAX_VERTICES]; //边信息的数组。
	int numV; //当前的顶点数
	int numA; //当前的边数
}AdMatrix;
typedef struct
{
	int  *base;
	int front;
	int rear;
}CyQueue;


//图的生成函数
void CreateGraph(AdMatrix *G)
{
    int n, e, vi, vj;
	printf("请输入顶点数和边数:");
	scanf("%d,%d", &n, &e);
	G->numV = n;
	G->numA = e;
	//Vertices数组的创建
	printf("请输入顶点本身的数据:\n");
	for (int i = 0; i < G->numV; i++)
	{

		scanf("%d", &G->Vertices[i]);
	}
	//AdjacencyMatrix数组的建立
	printf("请输入边的数据:\n");
	for (int i = 0; i < G->numA; i++)
	{
		scanf("%d,%d", &vi, &vj);
		G->AdjacencyMatrix[vi - 1][vj - 1] = 1;
		G->AdjacencyMatrix[vj - 1][vi - 1] = 1;
	}
}
//输出邻接矩阵的信息
void ShowGraph(AdMatrix *G)
{
	int i, j;
	for (i = 0; i < G->numV; i++)
	{
		//printf("\n%d ", i + 1);
		for (j = 0; j < G->numV; j++)
		{
			/*if (G->AdjacencyMatrix[i][j] == MAX_WEIGHT)
			{
				printf("%s ", "∞");
			}
			else
			{
				printf("%d ", G->AdjacencyMatrix[i][j]);
			}*/
			printf("%d ", G->AdjacencyMatrix[i][j]);
		}
		printf("\n");
	}
}


/*循环队列基本操作*/
void create(CyQueue *q)
{
	q->base=(int  *)malloc(Maxsize*sizeof(int));
	if(!q->base)
	{
		printf("Space allocation failed!\n");
		return;
	}
	q->front=q->rear=0;
	return;
}

void EnQueue(CyQueue *q,int value)
{
	if((q->rear+1)%Maxsize==q->front)
	{
		printf("Cyclic Queue is Full!\n");
		return;
	}
	q->base[q->rear]=value;
	q->rear=(q->rear+1)%Maxsize;
	return;
}

void DeQueue(CyQueue *q,int *value)
{
	if(q->front==q->rear)
	{
		printf("Cyclic Queue is Empty!\n");
		return;
	}
	*value=q->base[q->front];
	q->front=(q->front+1)%Maxsize;
	return;
}

int QueueEmpty(CyQueue *q)
{
    if (q->front==q->rear)//队列为空返回1,不为空返回0
	{
        return 1;
    }
    return 0;
}

/*广度优先遍历BFS*/
int visited[MAX_VERTICES];//定义"标志"数组为全局变量

void BFS(AdMatrix *G,int i)
{
	int j;
	CyQueue q;
	create(&q);
   //1.设置起始点
	printf("%d ",G->Vertices[i]);//1.输出当前结点
	visited[i]=1;//2.将已访问的结点标志成1
	EnQueue(&q,i);//3.将第一个结点入队

    //2.由起始点开始,对后续结点进行操作
	while(!QueueEmpty(&q))
	{

		DeQueue(&q,&i);

		for(j=0;j<G->numV;j++)
		{
			if(G->AdjacencyMatrix[i][j]==1&&visited[j]==0)
			{
				printf("%d ",G->Vertices[j]);//输出符合条件的顶点
	            visited[j]=1;//设置成已访问状态1
	            EnQueue(&q,j);//入队
			}
		}
	}
}

/*void BFSTraverse(AdMatrix *G)
{
	int i;

	//数组初始化为全0
	for(i=0;i<G->numV;i++)
	{
		visited[i]=0;
	}

	for(i=0;i<G->numV;i++)
	{
		if(visited[i]==0)
		{
			BFS(G,i);
		}
	}
}
*/
int main()
{
	AdMatrix G;
	CreateGraph(&G);
	ShowGraph(&G);
	printf("输入BFS遍历的起始结点:");
	int n;
	scanf("%d",&n);
	BFS(&G,n-1);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Winsoft Office Component Suite

Winsoft Office Component Suite Winsoft Office组件套件是由Winsoft发布的海豚和CBuilder公司的集合。这些计算机可用于在microsoft office集合中实现自动化和自动操作。从2010年到2019年&#xff0c;这些活动几乎支持了Office的所有现代版本&#xff0c;并提供了两种软件和氧…

掌控安全学院SOL注入靶场

掌控安全学院SOL注入靶场靶场地址Pass-01 显错注入Pass-02Pass-03Pass-04Pass-05 POST注入Pass-06Pass-07 Head注入Pass-08Pass-09Pass-10 布尔盲注Pass-11Pass-12Pass-13 延时注入Pass-14Pass-15 宽字节注入Pass-16Pass-17总结靶场地址 http://inject2.lab.aqlab.cn Pass-01…

[Python] Django ORM与执行原生SQL实现操作数据库

前言 系列文章目录 [Python]目录 文章目录前言&#x1f349; ORM&#x1f349; shell&#x1f349; 模型类与数据的准备&#x1f352; 模型类&#x1f352; 数据&#x1f349; 查询数据&#x1f352; 查询集&#x1f353; 查询集的特性&#x1f34e; 惰性执行&#x1f34e; 缓存…

PDF文件如何设置密码保护?

接近年底&#xff0c;各种总结报告越来越多&#xff0c;很多时候我们都会将报告做成PDF文件格式&#xff0c;对于重要的内容&#xff0c;往往还需要设置密码保护。 根据不同的需要&#xff0c;可以给PDF文件设置两种保护模式。 如果文件内容只分享给特定的人看&#xff0c;不…

qt调用python脚本中的函数

开发环境&#xff1a; qt 5.9.9 vs2015 python 3.6 例程下载&#xff1a; qt调用python脚本例程.rar 步骤一&#xff1a;创建python脚本文件 创建文本文件myPythonFile.py&#xff0c;内容如下&#xff1a; 步骤二&#xff1a;创建qt widget测试例程并运行 新建qt wi…

请不要忽略软件测试的业务能力

在日常的测试工作中&#xff0c;不知道大家是否会有梳理自己测试业务的习惯。我个人觉得这个事情是值得做的&#xff0c;最好还可以培养成一个习惯。一、为什么要梳理业务&#xff1f;因为在业务测试中&#xff0c;作为测试人员&#xff0c;熟悉负责的业务是非常重要的&#xf…

ats 6.2.3中diags.log日志滚存遇到的assert崩溃问题并解决

现在线上ats 6.2.3现在都开启了diags.log日志回滚的功能&#xff0c;采用下面的配置方法 CONFIG proxy.config.diags.logfile.rolling_enabled INT 3 CONFIG proxy.config.diags.logfile.rolling_interval_sec INT 86400 CONFIG proxy.config.diags.logfile.rolling_size_mb…

Web前端——立体相册的制作

文章目录笔记&#xff1a;CSS的特殊样式作业&#xff1a;用CSS的特殊样式制作立体相册笔记&#xff1a;CSS的特殊样式 media查询 常⽤于响应式布局&#xff0c;是⽬前使⽤最多的适配⻚⾯的技术。他会根据⻚⾯的尺⼨的不同&#xff0c;⽽是⽤不同的样式。 <style>media…

LeetCode50天刷题计划第二季(Day 31 — 两数之和 II - 输入有序数组(11.10-11.20)分数到小数(11.30-12.30)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、题目两数之和 II - 输入有序数组示例提示二、思路三、代码四、题目分数到小数示例提示五、思路六、代码前言 没看出来跟 两数之和 I 有什么区别 一、题目 …

码农死磕这份Java高级开发文档,成功‘挤‘进一线大厂,这也太强了吧

前言 很多程序员一开始在学习上找不到方向&#xff0c;但我想在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显&#xff0c;工作的方向也会逐渐变得清晰起来。 但是没过多久&#xff0c;能了解到的资料就开始超过每天学习的能力&#xff0c;像是买了没看的书、…

内网渗透神器CobaltStrike之重定向服务配置(二)

重定向服务的概念 "重定向"是一个在CS服务器与目标主机进行网络传输之间的服务器, 不仅能保护CS服务器, 还能增强与目标网络传输的稳定性, 例如某一台重定向服务器倒塌了, 但是CS服务器还是能通过其他重定向服务器与目标网络进行信息传输 环境拓扑 域名: team.comD…

ELSEVIER期刊论文投稿全流程实例讲解

Elsevier期刊模板下载 从ELSEVIER搜索要投的期刊&#xff0c;进入期刊主页 https://www.elsevier.com/search-results?queryFuel

【附源码】Python计算机毕业设计体育场馆预定网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

基于随机森林算法完成鸢尾花卉品种预测任务 代码+数据

1.理论部分 随机森林(Random Forest),顾名思义,就是由很多决策树模型融合在一起的算法。 随机森林是一种运用了集成学习(ensemble learning)的决策树分类器。 随机森林是一种基于Bagging框架的模型融合算法,如图1.2所示。它通过多个基础的决策树模型进行训练,如何通过…

Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、区分点击和长按动作 区分点击和长按动作&#xff0c;只要看按压时长是否超过500毫秒即可&#xff0c;没超过的表示点击动作&#xff0c;超过了的表示长按动作。其实除了按压时长之外&#xff0c;按压力度也是一个重要的…

Isaac-gym(5):关于强化学习

官方链接&#xff1a; https://github.com/NVIDIA-Omniverse/IsaacGymEnvs 1、环境建立示例 import isaacgym import isaacgymenvs import torchenvs isaacgymenvs.make(seed0, task"Ant", #对应执行时用到的名称num_envs2000, sim_device"cuda:0"…

智芯传感-工业雷管禁售在即,电子雷管的大发展已然到来!

在我国重点支持发展的基础设施建设领域中&#xff0c;民爆行业是一个相对小众、但是非常重要的行业。在“十四五”规划中&#xff0c;国家大力推进电子雷管替代工业雷管&#xff0c;持续加强激励与引导&#xff0c;推进生产工艺及装备向安全可靠、绿色环保、智能制造方向发展&a…

Makefile 基础(二)—— Makefile 自动推导+ Makefile伪目标

目录 1、Makefile 自动推导&#xff08;隐含规则&#xff09; (1) 依赖项都在当前目录下 (2) 一部分依赖项不在当前目录下 2、Makefile 伪目标 1、Makefile 自动推导&#xff08;隐含规则&#xff09; 所谓隐含规则指的是&#xff0c;我们在Makefile文件中不使用 gcc/g 命…

openTCS 5.2 学习记录一(避坑)

openTCS5.2 学习记录一 初学者记录 一、学习背景 最近领导安排学习AGV相关调度方面的东西&#xff0c;我司使用的是openTCS来做AGV调度管理。本文主要记录最简单的启动&#xff0c;并且记录使用过程中的各个坑。 二、参考资料 openTCS官网 https://www.opentcs.org/en/ind…

玩机搞机-----安卓全机型刷机卡fastboot模式解决方法与故障解析

今天给友友们讨论下手机刷机后进不去系统卡fastboot模式一些问题解决方法和造成的原因故障解析。一般这类操作是由于以下几种原因导致的。包括但不限于以下其中之一 这种故障排除硬件原因除外哦 1-----刷第三方系统导致的重启卡fastboot模式 2-----降级更新官方固件跨版本幅…