用邻接矩阵实现图的深度优先遍历

server/2024/11/24 17:41:51/
问题描述

给定一个无向图,用邻接矩阵作为图的存储结构,输出指定顶点出发的深度优先遍历序列。在深度优先遍历的过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问。

输入描述

第一行输入三个正整数,分别表示无向图的顶点数n(2≤n≤100,顶点从1到n编号)、边数m和指定起点编号s。
接下来的m行对应m条边,每行给出两个正整数,分别是该条边直接连通的两个顶点的编号。

输出描述

输出从 s开始的深度优先遍历序列,用一个空格隔开,最后也含有一个空格。如果从 s出发无法遍历到图中的所有顶点,则在第二行输出Non‑connected。

样例输入
5 4 1
1 2
3 1
5 2
2 3
样例输出
1 2 3 5 
Non-connected
#include<stdio.h>
#define MVNUM 10 //最大顶点数
typedef int VerTexType; //顶点数据类型为整型
typedef int ArcType; //边的权值为整型
typedef struct
{VerTexType vexs[MVNUM];//顶点表ArcType arcs[MVNUM][MVNUM]; //邻接矩阵int vexnum, arcnum; //图当前的顶点数和边数int visited[MVNUM];
}AMGraph;
static int LocateVex(AMGraph G, int v)  //在图中查找顶点
{for (int i = 0; i < G.vexnum; i++)if (v == G.vexs[i])return i;return -1;
}
static void CreateUDG(AMGraph &G)  //创建无向网
{for (int i = 0; i < G.vexnum; i++) //创建顶点表{G.vexs[i] = i + 1;G.visited[i+1] = 0;  //未搜索的顶点标记为0}for (int i = 0; i < G.vexnum; i++)  //邻接矩阵元素置零for (int j = 0; j < G.vexnum; j++)G.arcs[i][j] = 0;for (int k = 0; k < G.arcnum; k++){int v1 = 0, v2 = 0;scanf("%d%d", &v1, &v2);int i = LocateVex(G, v1);int j = LocateVex(G, v2);G.arcs[i][j] = 1;G.arcs[j][i] = 1;}return;
}
int count = 0;
static void DFS(AMGraph &G, int v)
{count++;printf("%d ", v);G.visited[v] = 1;  //访问过的顶点标记为1for (int j = 1; j <= G.vexnum; j++)if (G.arcs[v-1][j-1] && !G.visited[j])DFS(G, j);  //递归调用
}
int main()
{int s = 0;  //指定起点编号AMGraph G;scanf("%d%d%d", &G.vexnum, &G.arcnum, &s);CreateUDG(G);DFS(G, s);if (count < G.vexnum)printf("\nNon-connected");return 0;
}   


http://www.ppmy.cn/server/144598.html

相关文章

centos7 安装helm v3

文章目录 1. 安装 Helm v3步骤 1&#xff1a;下载 Helm 安装包步骤 2&#xff1a;解压安装包步骤 3&#xff1a;将 Helm 移动到 /usr/local/bin步骤 4&#xff1a;验证安装 2. 使用 Helm 配置 Kubernetes步骤 1&#xff1a;安装并配置 kubectl步骤 2&#xff1a;初始化 Helm步骤…

XCode Build时遇到 .entitlements could not be opened 的问题

遇到错误 在构建成功的XCode工程上&#xff0c;手动打开XCode并Build&#xff0c;遇到以下问题&#xff1a; The file .entitlements could not be opened. Did you forget to declare this file as an output of a script phase or custom build rule which produces it 打…

YOLO-FaceV2: A Scale and Occlusion Aware Face Detector

《YOLO-FaceV2:一种尺度与遮挡感知的人脸检测器》 1.引言2.相关工作3.YOLO-FaceV23.1网络结构3.2尺度感知RFE模型3.3遮挡感知排斥损失3.4遮挡感知注意力网络3.5样本加权函数3.6Anchor设计策略3.7 归一化高斯Wasserstein距离 4.实验4.1 数据集4.2 训练4.3 消融实验4.3.1 SEAM块4…

《AI大模型开发笔记》Faster-Whisper 免费开源的高性能语音识别模型

1 Whisper模型&#xff0c;免费开源的语音识别模型 Whisper模型是OpenAI公开的语音识别模型。这是一个免费可商用的模型。 Whisper模型根据参数量来区分&#xff0c;有多个不同的版本&#xff0c;分别是tiny&#xff0c;base&#xff0c;small medium&#xff0c;large&#x…

MySQL安装及数据库基础

目录 一. MySQL下载安装 1.1 安装&#xff08;如果之前有安装过MySQL&#xff0c;先执行下面的卸载流程&#xff09; 1.1.1 更新系统的软件包列表 1.1.2 安装MySQL服务器 1.1.3 检查MySQL服务是否启动&#xff0c;若没有启动手动启动 1.1.4 登录MySQL&#x…

【论文阅读】Poison Forensics: Traceback of Data Poisoning Attacks in Neural Networks

Poison Forensics: Traceback of Data Poisoning Attacks in Neural Networks 核心原理前提条件方法第一个问题第二个问题 核心原理 有毒样本会使模型更接近参数空间中的最佳位置&#xff0c;良性样本会使该模型向其随机初始化状态移动 前提条件 最重要的&#xff1a; 可以…

Perfetto学习大全

Perfetto 是一个功能强大的性能分析和追踪工具&#xff0c;主要用于捕获和分析复杂系统中的事件和性能数据&#xff0c;特别是在 Android 和 Linux 环境下。它的核心目标是帮助开发者深入了解系统和应用程序的运行状态&#xff0c;以便优化性能和诊断问题。 Perfetto的主要作用…

嵌入式开发人员如何选择合适的开源前端框架进行Web开发

在嵌入式系统的Web开发中&#xff0c;前端框架的选择对于项目的成败有着决定性的影响。一个合适的框架不仅能提高开发效率&#xff0c;还能保证系统的稳定性和可扩展性。本文将介绍几款适用于嵌入式Web开发的开源前端框架&#xff0c;并探讨它们的优缺点。 1. Element Plus V…