XDOJ324.图的广度优先遍历

问题与解答

问题描述

已知无向图的邻接矩阵,以该矩阵为基础,给出广度优先搜索遍历序列,并且给出该无向图的连通分量的个数。在遍历时,当有多个点可选时,优先选择编号小的顶点。(即从顶点1开始进行遍历)

输入格式

第一行是1个正整数,为顶点个数n(n<100),顶点编号依次为1,2,…,n。后面是邻接矩阵,n行n列。

输出格式

共2行。第一行输出为无向图的广度优先搜索遍历序列,输出为顶点编号,顶点编号之间用空格隔开;第二行为无向图的连通分量的个数。

样例输入

6

0 1 0 0 0 0

1 0 0 0 1 0

0 0 0 1 0 0

0 0 1 0 0 0

0 1 0 0 0 1

0 0 0 0 1 0

样例输出

1 2 5 6 3 4

2

//图的广度优先遍历
#include<stdio.h>
#include<queue>
using namespace std;
#define MaxN 100
int G[MaxN][MaxN]; //邻接矩阵表示图
int inq[MaxN] = {false}; //标记数组
int connection = 0; //连通分量
queue<int> que; //队列声明
int n; //结点数 void BFSTrave();
void BFS(int u); int main(){
int i,j;
//建立图
scanf("%d", &n);
for(i = 0; i < n; i ++){
for(j = 0; j < n; j++){
scanf("%d", &G[i][j]);
}
}
//BFS输出结点及连通分量
BFSTrave();
printf("\n%d", connection);
}
void BFSTrave(){
int u;
for(u = 0; u < n; u++){
if(inq[u] == false){ //若当前结点未被访问
BFS(u); //遍历其所在连通分量
connection++; //连通分量数目+1
}
}
}
void BFS(int u){
int v;
que.push(u); //当前结点入队
inq[u] = true; //标记已访问
printf("%d ", u+1); //输出结点编号
while(!que.empty()){
u = que.front();
que.pop();
for(v = 0; v < n; v++){
if(inq[v] == false && G[u][v] != 0){ //访问u未被访问过的邻接结点
que.push(v); //邻接结点入队
inq[v] = true; //标记已访问
printf("%d ", v+1); //输出结点编号
}
}
}
}

XDOJ325.图的深度优先遍历

问题与描述

问题描述

已知无向图的邻接矩阵,以该矩阵为基础,给出深度优先搜索遍历序列,并且给出该无向图的连通分量的个数。在遍历时,当有多个点可选时,优先选择编号小的顶点。(即从顶点1开始进行遍历)

输入格式

第一行是1个正整数,为顶点个数n(n<100),顶点编号依次为1,2,…,n。后面是邻接矩阵,n行n列。

输出格式

共2行。第一行输出为无向图的深度优先搜索遍历序列,输出为顶点编号,顶点编号之间用空格隔开;第二行为无向图的连通分量的个数。

样例输入

6

0 1 0 0 0 0

1 0 0 0 1 0

0 0 0 1 0 0

0 0 1 0 0 0

0 1 0 0 0 1

0 0 0 0 1 0

样例输出

1 2 5 6 3 4

2

//图的深度优先遍历
#include<stdio.h>
#define MaxN 100
int G[MaxN][MaxN]; //邻接矩阵
int vis[MaxN] = {false}; // 标记矩阵
int connection = 0; //连通分量
int n; //节点数
void DFS(int u);
void DFSTrave();
int main(){
int num = 1;
//建立图
scanf("%d", &n);
int i,j;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
scanf("%d",&G[i][j]);
}
}
DFSTrave();
printf("\n%d",connection);
}
void DFSTrave(){
int u;
for(u = 0; u < n; u++){ //遍历每一个顶点
if(vis[u] == false){ // 未被访问
DFS(u); //访问所在的连通分量
connection++; // 连通分量+1
}
}
}
void DFS(int u){
int v;
vis[u] = true; //设置该节点为已访问
printf("%d ", u+1);
for(v = 0; v < n; v++){
if(vis[v] == false && G[u][v] != 0){ //遍历未被访问的邻接点
DFS(v); //递归
}
}
}

题后反思

  1. BFS与DFS写法上:

    • 都需要建立标记数组vis[]/inq[]

    • 都有两个函数构成

      • BFS/BFSTrave(u)
      • DFS/DFSTrave(u)

      后者遍历u所在的连通分量

  2. queue的使用:先que.front()再que.pop()

<数据结构>XDOJ324,325图的优先遍历的更多相关文章

  1. 数据结构之 图论---图的深度遍历( 输出dfs的先后遍历序列 )

    图的深度遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出.遍历时,先遍历节点编 ...

  2. 用js来实现那些数据结构16(图02-图的遍历)

    上一篇文章我们简单介绍了一下什么是图,以及用JS来实现一个可以添加顶点和边的图.按照惯例,任何数据结构都不可或缺的一个point就是遍历.也就是获取到数据结构中的所有元素.那么图当然也不例外.这篇文章 ...

  3. 1048 图的宽度优先遍历序列 c语言

    描述 图(graph)是数据结构 G=(V,E),其中V是G中结点的有限非空集合,结点的偶对称为边(edge):E是G中边的有限集合.设V={0,1,2,……,n-1},图中的结点又称为顶点(vert ...

  4. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  5. 重新整理数据结构与算法(c#)—— 图的深度遍历和广度遍历[十一]

    参考网址:https://www.cnblogs.com/aoximin/p/13162635.html 前言 简介图: 在数据的逻辑结构D=(KR)中,如果K中结点对于关系R的前趋和后继的个数不加限 ...

  6. 数据结构实验之图论二:图的深度遍历(SDUT 2107)(简单DFS)

    题解:图的深度遍历就是顺着一个最初的结点开始,把与它相邻的结点都找到,也就是一直往下搜索直到尽头,然后在顺次找其他的结点. #include <bits/stdc++.h> using n ...

  7. 数据结构——图的深度优先遍历(邻接矩阵表示+java版本)

    ​1.深度优先遍历(DFS) 图的深度优先遍历本质上是一棵树的前序遍历(即先遍历自身,然后遍历其左子树,再遍历右子树),总之图的深度优先遍历是一个递归的过程. 如下图所示,左图是一个图,右图是图的深度 ...

  8. 【C#数据结构系列】图

    一:图 图状结构简称图,是另一种非线性结构,它比树形结构更复杂.树形结构中的结点是一对多的关系,结点间具有明显的层次和分支关系.每一层的结点可以和下一层的多个结点相关,但只能和上一层的一个结点相关.而 ...

  9. SDUT-2107_图的深度遍历

    数据结构实验之图论二:图的深度遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定一个无向图,顶点编号从0到n-1 ...

随机推荐

  1. 从源码看Thread&ThreadLocal&ThreadLocalMap的关系与原理

    1.三者的之间的关系 ThreadLocalMap是Thread类的成员变量threadLocals,一个线程拥有一个ThreadLocalMap,一个ThreadLocalMap可以有多个Threa ...

  2. Spring(1):Spring介绍

    一,Spring简介: Spring是一个开源框架,它由Rod Johnson创建:它是为了解决企业应用开发的复杂性而创建的 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架 ...

  3. Thymeleaf标准表达式

    Thymeleaf的官网为: http://www.thymeleaf.org/ 一.变量表达式${-} 使用${-}括起来的表达式,称为变量表达式.该表达式的内容会显示在HTML标签体文本处. 该表 ...

  4. 12.Vue.js 表单

    这节我们为大家介绍 Vue.js 表单上的应用. 你可以用 v-model 指令在表单控件元素上创建双向数据绑定. <div id="app"> <p>in ...

  5. 4.Vue.js-起步

    Vue.js 起步 每个 Vue 应用都需要通过实例化 Vue 来实现. 语法格式如下: var vm = new Vue({ // 选项 }) 接下来让我们通过实例来看下 Vue 构造器中需要哪些内 ...

  6. python的随机森林模型调参

    一.一般的模型调参原则 1.调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调.但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合 ...

  7. 莫烦python教程学习笔记——线性回归模型的属性

    #调用查看线性回归的几个属性 # Youtube video tutorial: https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg # ...

  8. 使用IDEA整合spring4+spring mvc+hibernate

    配置文件 spring-mvc.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans x ...

  9. Mysql资料 xtrabackup

    目录 一.简介 原理 优缺点 二.安装 三.日常使用 备份所有库 增量备份 远程备份 四.参数 一.简介 原理 其实XtraBackup也是基于INNODB的 crash-recovery功能来实现的 ...

  10. 【论文笔记】Recommendations as Treatments: Debiasing Learning and Evaluation

    Recommendations as Treatments: Debiasing Learning and Evaluation Authors: Tobias Schnabel, Adith Swa ...