数据结构实验三 图的深度优先搜索(包含求连通分量)

news2024/11/26 13:45:26

全屏浏览作者 王群芳

单位 合肥师范学院

以邻接矩阵作存储结构,编写程序对给定的无向图(图中包含n个顶点,编号为0至n-1)进行深度优先遍历,并在遍历的过程中计算图G的连通分量个数及边的数目。

本题限定在遍历过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问,以顶点0为遍历起点。

邻接矩阵的类型描述

#define  MaxVexNum   20     //最大顶点数目
typedef struct 
{    int  arcs[MaxVexNum][MaxVexNum];
     int  vexnum, arcnum;
}AMGraph;

输入格式:

第一行输入图的顶点数边数

接下来每行代表一条边,输入边依附的两个顶点的编号。各边输入先后次序无要求。

输出格式

输出分三行

  • 第一行 深度优先遍历序列。序列中每个顶点编号后跟一个空格。
  • 第二行 连通分量个数
  • 第三行 边数

 

 

 

输入样例:

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

输出样例:

0 1 3 4 2 5 6 7 8 
2
8

 

#include<iostream>
using namespace std;
#define mvnum 100
#define OK 1
typedef int vertextype;
typedef int arctype;
typedef struct {
	vertextype vexs[mvnum];
	arctype arcs [mvnum][mvnum];
	int vexnum,arcnum;
}amgraph;
amgraph g;
bool visited [mvnum];
int createudn(amgraph &g){
	int i,j;
    int u,v;
	cin >>g.vexnum >> g.arcnum;
	for(i=0;i<g.vexnum;++i){
		g.vexs[i]=i;
	}
	for(i=0;i<g.vexnum;++i){
		for(j=0;j<g.vexnum;++j){
			g.arcs[i][j]=0;
		}
	}
	for(i=0;i<g.arcnum;i++){
		cin >> u >> v;
		g.arcs[u][v]=g.arcs[v][u]=1;
	}
	return OK;
}
void DFS(amgraph g,int v){
	cout<< v << " ";
	visited[v]=1;
	int w;
	for(w=0;w<g.vexnum;w++){
		if((g.arcs[v][w]!=0) && (!visited[w])){
			DFS(g,w);
		}
	}
}
int main()
{
	createudn(g);
	DFS(g,0);
	int count=1;
	int i,j;
	for(i=1;i<g.vexnum;i++){
		if(!visited[i]){
			DFS(g,i);
			count++;
		}
	}
	cout << endl;
	cout << count << endl;
	cout << g.arcnum;
	return 0;
}

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

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

相关文章

车载软件架构 —— Adaptive AUTOSAR软件架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师&#xff08;Wechat&#xff1a;gongkenan2013&#xff09;。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 本就是小人物&#xff0c;输了就是输了&#…

蓝桥杯:C++排序

排序 排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。 第(3)种排序算法不是基于比较的&#xff0c;而是对数值按位划分&#xff0c;按照以空间换取时间的思路来排序。看起来它们的复杂度更好&#xff0c;但实际…

数模.传染病模型plus

一、SIS模型 二、SIR模型 三、SIRS模型 四、SEIR模型

Python第十六章(面向对象)

类&#xff1a;是对一系列相同特征和行为的事物的统称&#xff0c;是一个抽象的概念&#xff0c;不是真实存在的事物 特征&#xff1a;属性/变量 行为&#xff1a;方法/函数 对象&#xff1a;类创建出来的真实事物 类和对象的关系&#xff1a;先构造一个类&#xff0…

GitHub项目推荐-InstantID

项目地址 https://github.com/InstantID/InstantID 项目简述 InstantID是一个图生图项目&#xff0c;仅仅通过一张正脸的图片&#xff0c;就能生成各种风格的人像。该项目的文档描述比较齐备&#xff0c;所以复现起来成本比较小。 项目截图 这是项目介绍中的一张截图&…

二叉树基础总结

目录 树的定义&#xff1a; 深度和高度&#xff1a; 二叉树 由来 二叉树种类&#xff1a; 满二叉树&#xff1a; 完全二叉树&#xff1a; 严格二叉树&#xff08;Strict Binary Tree&#xff09;&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&…

【阅读笔记】空域保边降噪《Side Window Filtering》

1、保边滤波背景 保边滤波器的代表包括双边滤波、引导滤波&#xff0c;但是这类滤波器有一个问题&#xff0c;它们均将待处理的像素点放在了方形滤波窗口的中心。但如果待处理的像素位于图像纹理或者边缘&#xff0c;方形滤波核卷积的处理结果会导致这个边缘变模糊。 基于这个…

算法刷题:有效三角形个数

有效三角形个数 .题目链接题目详情算法原理补充知识点双指针:对撞指针 我的答案 . 题目链接 有效三角形个数 题目详情 算法原理 补充知识点 有效三角形需要满足的条件: ab>cac>bbc>a 其实在满足1的时候,c是最大的,那么2和3是显然成立的,因此我们可以这样解题: 对…

【北邮鲁鹏老师计算机视觉课程笔记】10 Classification 分类

【北邮鲁鹏老师计算机视觉课程笔记】10 Classification 分类 1 图像识别的基本范式 检测问题&#xff1a;不仅要知道有没有&#xff0c;还要知道在哪里 分类是整图级标签&#xff0c;检测是区域级标签&#xff0c;分割是像素级标签 2 检测任务的应用 3 单实例识别与类别识别…

九、OpenCV自带colormap

项目功能实现&#xff1a;每隔1500ms轮流自动播放不同风格图像显示&#xff0c;按下Esc键退出 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 colormap.h #pragma once #include<opencv2/opencv.hpp> using namespace cv;class ColorMap { public:vo…

Rust 数据结构与算法:1算法分析之乱序字符串检查

Rust 数据结构与算法 一、算法分析 算法是通用的旨在解决某种问题的指令列表。 算法分析是基于算法使用的资源量来进行比较的。之所以说一个算法比另一个算法好,原因就在于前者在使用资源方面更有效率,或者说前者使用了更少的资源。 ●算法使用的空间指的是内存消耗。算法…

浅谈业务场景中缓存的使用

业务场景中缓存的使用 一、背景二、缓存分类1.本地缓存2.分布式缓存 三、缓存读写模式1.读请求2.写请求 四、缓存穿透1.缓存空对象2.请求校验3.请求来源限制4.布隆过滤器 五、缓存击穿1.改变过期时间2.串行访问数据库 六、缓存雪崩1.避免集中过期2.提前更新缓存 七、缓存与数据…

初始JAVA

目录 一、输出HelloWorld 1.1开发步骤 1.2 编写 1.3 编译 1.4 运行 二、 HelloWorld小结 2.1 Java程序的结构与格式 2.2 Java程序的入口 2.3 两种常见的输出语句 2.4 源文件名与类名 三、 注释(comment) 四、 Java API文档 五、 Java核心机制&#xff1a;JVM 5.1…

OpenAI宣布ChatGPT新增记忆功能;谷歌AI助理Gemini应用登陆多地区

&#x1f989; AI新闻 &#x1f680; OpenAI宣布ChatGPT新增记忆功能&#xff0c;可以自由控制内存&#xff0c;提供个性化聊天和长期追踪服务 摘要&#xff1a;ChatGPT新增的记忆功能可以帮助AI模型记住用户的提问内容&#xff0c;并且可以自由控制其内存。这意味着用户不必…

第三百二十二回

文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FadeInImage组件"相关的内容&#xff0c;本章回中将介绍CachedNetworkImage组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

随机过程及应用学习笔记(三)几种重要的随机过程

介绍独立过程和独立增量过程。重点介绍两种独立增量过程-—维纳过程和泊松过程。 目录 前言 一、独立过程和独立增量过程 1、独立过程&#xff08;Independent Process&#xff09; 2、独立增量过程&#xff08;Independent Increment Process&#xff09; 二、正态过程&am…

202324读书笔记|《谢谢你一直陪着我》——谈一场健康的恋爱,玩玩闹闹,一起到老

202324读书笔记|《谢谢你一直陪着我》——谈一场健康的恋爱&#xff0c;玩玩闹闹&#xff0c;一起到老 《谢谢你一直陪着我》作者肥肥鲨&#xff0c;这是一本恋爱小绘本&#xff0c;肥肥鲨和粉粉鲨的相处小片段&#xff0c;轻松读物值得一读。 情人节夜晚熬夜看完的小漫画&am…

边缘计算第二版施巍松——第8章边缘计算系统实例

8.1边缘计算系统概述 1.Cloudlet 架构&#xff1a;移动设备-Cloudlet-云 cloudlet也可以像云一样为用户提供服务&#xff0c;Cloudlet离移动设备只有一跳的距离&#xff0c;具有物理距离的临近性&#xff0c;可以保证实时反馈时延低&#xff0c;又可以利用局域网的高带宽优势&…

《Java 简易速速上手小册》第6章:Java 并发编程(2024 最新版)

文章目录 6.1 线程的创建和管理 - 召唤你的士兵6.1.1 基础知识6.1.2 重点案例&#xff1a;实现一个简单的计数器6.1.3 拓展案例 1&#xff1a;定时器线程6.1.4 拓展案例 2&#xff1a;使用 Executor 框架管理线程 6.2 同步机制 - 维持军队的秩序6.2.1 基础知识6.2.2 重点案例&a…

如何合理规划 PostgreSQL 的数据库用户

PostgreSQL 作为世界上最领先的开源数据库&#xff0c;有一套强大的用户角色权限系统&#xff0c;和 MySQL 做一个对比&#xff1a; 但硬币的另一面则是对于简单场景来说增加了复杂度。在许多单应用场景&#xff0c;其实也不需要额外的 schema 层&#xff0c;也不需要额外的 ow…