图的两种遍历方式dfs/bfs

2023-11-10

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

int visited[100];

typedef struct {
	int** connection;
	int nodesize;
}Graph,*GraphPtr;

GraphPtr Init(int** matrix,int size) {
	GraphPtr G = (GraphPtr)malloc(sizeof(Graph));
	G->connection = (int**)malloc(sizeof(int*) * size);
	for (int i = 0; i < size; i++) {
		G->connection[i] = (int*)malloc(sizeof(int) * size);
	}
	for (int i = 0; i < size; i++) {
		for (int j = 0; j < size; j++) {
			G->connection[i][j] = matrix[i][j];
		}
	}
	G->nodesize = size;
	memset(visited, 0, sizeof(int) * 100);
	return G;
}

void DFS(GraphPtr G, int N) {
	visited[N] = 1;
	printf("%d\n", N);
	for (int i = 0; i < G->nodesize; i++) {
		if ((!visited[i]) && G->connection[N][i]) DFS(G, i);
	}
	return;
}

#define max_size 10

typedef struct {
	int front, rear;
	int data[max_size];
}CircleQue,*CircleQuePtr;

CircleQuePtr InitQ() {
	CircleQuePtr C_Que = (CircleQuePtr)malloc(sizeof(CircleQue) * max_size);
	C_Que->front = 0;
	C_Que->rear = 0;
	return C_Que;
}

void enque(CircleQuePtr C_Que,int data) {
	if ((C_Que->rear + 1) % max_size == C_Que->front) {
		printf("no space \n");
		return;
	}
	C_Que->data[C_Que->rear%max_size] = data;
	C_Que->rear++;
}

int deque(CircleQuePtr C_Que) {
	if (C_Que->front == C_Que->rear) {
		printf("NULL\n");
		return -1;
	}
	int tempdata = C_Que->data[C_Que->front%max_size];
	C_Que->front++;
	return tempdata;
}


void BFS(GraphPtr G, int N) {
	CircleQuePtr Q = InitQ();
	enque(Q, N);
	visited[N] = 1;
	int a;
	while (Q->front != Q->rear) {
		a = deque(Q);
		printf("%d", a);
		for (int i = 0; i < G->nodesize; i++) {
			if ((!visited[i]) && G->connection[a][i]) {
				enque(Q, i);
				visited[i] = 1;//应该入队就赶紧标记
			}
		}

	}
}


int main() {
	int myGraph[5][5] = {
		{0, 1, 0, 1, 0},
		{1, 0, 1, 0, 1},
		{0, 1, 0, 1, 1},
		{1, 0, 1, 0, 0},
		{0, 1, 1, 0, 0} };
	int** tempPtr;

	tempPtr = (int**)malloc(5 * sizeof(int*));
	for (int i = 0; i < 5; i++) {
		tempPtr[i] = (int*)malloc(5 * sizeof(int));
	}

	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			tempPtr[i][j] = myGraph[i][j];
		}
	}
	GraphPtr G = Init(tempPtr, 5);
	//DFS(G, 4);
	BFS(G, 4);

	return 0;

}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图的两种遍历方式dfs/bfs 的相关文章

随机推荐

  • 【计算机毕业设计】231论文投稿系统

    一 系统截图 需要演示视频可以私聊 本文介绍了论文投稿系统的开发全过程 通过分析企业对于论文投稿系统的需求 创建了一个计算机管理论文投稿系统的方案 文章介绍了论文投稿系统的系统分析部分 包括可行性分析等 系统设计部分主要介绍了系统功能设计和
  • 4-2 张量的数据运算

    张量数学运算主要有 标量运算 向量运算 矩阵运算 以及使用非常强大而灵活的爱因斯坦求和函数torch einsum 重难点 进行任意维的张量运算 此外还会介绍张量运算的广播机制 一 标量运算 操作的张量至少是0维 张量的数学运算符可以分为标
  • Java基础-继承

    子类继承父类后构造器的特点 子类中所有的构造器默认都会先访问父类中的无参的构造器 再执行自己 为什么 子类在初始化的时候 有可能会使用到父类中的数据 如果父类没有完成初始化 子类将无法使用父类的数据 子类初始化之前 一定要调用父类构造器先完
  • Topaz Video Enhance AI 2.3.0 for Mac专业级AI视频增强软件,详细图文安装教程。

    Topaz Video Enhance AI 2 3 0 for Mac是世界一流的AI视频质量增强软件 站长亲测有效 使用突破性的 AI 技术进行令人惊叹的视频放大 Topaz Video Enhance AI 接受了数千个视频的训练并结
  • IDEA常用插件介绍

    前言 插件名为笔者自用的IDEA2019 3 5所能搜索到的 若新版IDEA未能搜索到 可用括号内的插件名替代 一 Lombok 新版IDEA自带 Lombok能通过注解的方式 在编译时自动为属性生成构造器 getter setter eq
  • LeetCode-替换空格

    创建一个新的string 一边遍历原字符串的每一个字符 一边往新的字符串中写入 遇到空格替换为 20即可 class Solution public string replaceSpaces string str string res fo
  • Map和Set知识点

    目录 1 Map的使用 1 1 Map常用方法 2 Set的使用 2 1 Set常见方法 3 二叉搜索树 BST 4 哈希表 4 1 哈希冲突 4 2 避免哈希冲突 4 2 1 哈希函数的设计 4 2 2 负载因子调节 4 3 解决哈希冲突
  • mysql无法执行二进制文件_kail系统64,mysql64,出现-bash: bin/mysqld: 无法执行二进制文...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Linux localhost 3 10 72 1 SMP PREEMPT Thu Jun 16 13 34 40 CST 2016 aarch64 Kali GNU Linux Rolling
  • Ubuntu16.04 安装 ipython详细步骤

    ipython是一个不错的交互工具 调试Python代码很方便 安装ipython sudo apt get install ipython3 sudo pip install ipython 安装Qt console 工具 sudo pi
  • 【基于python+flask的车流量分析预测可视化-哔哩哔哩】 https://b23.tv/2q6251I

    基于python flask的车流量分析预测可视化 哔哩哔哩 https b23 tv 2q6251I https b23 tv 2q6251I
  • C++和C 混合编译链接时报错CMake Error: Cannot determine link language for target

    CMake Error Cannot determine link language for target 解决办法 project demo LANGUAGES C CXX CMake Error Cannot determine lin
  • 关于2的补码

    from http www ruanyifeng com blog 2009 08 twos complement html 问一个基本的问题 负数在计算机中如何表示 举例来说 8在计算机中表示为二进制的1000 那么 8怎么表示呢 很容易
  • torch 1.13.0 对应的torchvision版本

    torch最新的stable版本是1 13 0 奈何官网也没有说对应的torchvision版本是啥 如果想要whl下载的话 就非常麻烦 结论 torch 1 13 0对应torchvision 0 14 0 推导过程如下 首先看官网的 p
  • layer_factory.hpp:81] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Python

    这个问题我查了很多博客 里面很多都相近 但是不能用 首先这个问题的意思是 python层这个名字无法识别 然后给出了可以是别的例子 而这个层在trainval和text的prototxt中都有 解决方法 在caffe文件夹下找到makefi
  • Python---人生重开模拟器(简版)

    专栏 python 个人主页 HaiFan 专栏简介 本专栏主要更新一些python的基础知识 也会实现一些小游戏和通讯录 学时管理系统之类的 有兴趣的朋友可以关注一下 人生重开模拟器 思维导图 前言 一 设置初始属性 1 游戏标题 2 属
  • 一个useState学会React的主要思想

    正经学徒 佛系记录 不搞事情 皮毛React开发者 一个useState有什么好学的 hook那么多 哪个不比useState难 自身React开发者 学的不是如何使用 而是为什么会这样 直接进入主题 对React文档案例进行分析 可以先给
  • redis7知识点总结

    文章目录 1 redis单线程为啥会这么快 2 redis数据类型和底层存储结构 2 1 string类型 2 1 1 SDS 2 2 hash类型 2 3 list类型 2 4 set类型 集合 2 5 zset类型 有序集合 2 6 z
  • linux下MQTT服务器(EMQX)搭建及paho.mqtt.c客户端开发

    前言 MQTT 是一种基于客户端服务端架构的发布 订阅模式的消息传输协议 它的设计思想是轻巧 开放 简单 规范 易于实现 这些特点使得它对很多场景来说都是很好的选择 特别是对于受限的环境如机器与 机器的通信 M2M 以及物联网环境 IoT
  • Typora 免费版下载安装(超简单亲测适用于Windows)与入门

    前言 Typora大家都知道 是一款好用的编辑器和阅读器 鬼鬼为大家找了一个可使用版本 安装过程十分简单 亲测有效 不浪费大家时间 现在将Typora分享给大家免费使用 下载链接在文章最后 目录 前言 一 Typora的介绍 MarkDow
  • 图的两种遍历方式dfs/bfs

    include