(机考)无向图的深度优先搜索
Posted kirosola
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(机考)无向图的深度优先搜索相关的知识,希望对你有一定的参考价值。
问题描述
已知无向图的邻接矩阵,以该矩阵为基础,给出深度优先搜索遍历序列,并且给出该无向图的连通分量的个数。
在遍历时,当有多个点可选时,优先选择编号小的顶点。
输入说明:
第一行是1个正整数,为顶点个数n,顶点编号依次为0,1,…,n-1。后面是邻接矩阵,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
输出样例
0 1 4 5 2 3
2
提示
以邻接矩阵为存储结构,进行深度优先搜索遍历,在遍历的过程中计算无向图连通分量的个数。
问题描述
已知无向图的邻接矩阵,以该矩阵为基础,给出深度优先搜索遍历序列,并且给出该无向图的连通分量的个数。
在遍历时,当有多个点可选时,优先选择编号小的顶点。
输入说明:
第一行是1个正整数,为顶点个数n,顶点编号依次为0,1,…,n-1。后面是邻接矩阵,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
输出样例
0 1 4 5 2 3
2
提示
以邻接矩阵为存储结构,进行深度优先搜索遍历,在遍历的过程中计算无向图连通分量的个数。
#include<stdio.h> #include<stdlib.h> bool visited[100]; int G[100][100]; void DFS(int v, int vexnum) { visited[v] = true; printf("%d ", v); for (int i = 0; i < vexnum; i++) { if (visited[i] == false && G[v][i] != 0) DFS(i, vexnum); } } void DFSTraverse(int vexnum) { int i; int count = 0; for ( i = 0; i < vexnum; i++) visited[i] = false; for ( i = 0; i < vexnum; i++) { if (visited[i] == false) { DFS(i, vexnum); count++; } } printf(" %d ", count); } int main() { int i, j, vexnum; scanf("%d", & vexnum); for (i = 0; i < vexnum; i++) { for (j = 0; j < vexnum; j++) scanf("%d", &G[i][j]); } DFSTraverse(vexnum); }
以上是关于(机考)无向图的深度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章