码迷,mamicode.com
首页 > 其他好文 > 详细

(机考)无向图的深度优先搜索

时间:2019-11-22 01:21:16      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:false   遍历   ++   dfs   输出   arp   nbsp   lse   说明   

问题描述

已知无向图的邻接矩阵,以该矩阵为基础,给出深度优先搜索遍历序列,并且给出该无向图的连通分量的个数。

在遍历时,当有多个点可选时,优先选择编号小的顶点。

输入说明:

         第一行是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("\n%d\n", 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);
}

  

(机考)无向图的深度优先搜索

标签:false   遍历   ++   dfs   输出   arp   nbsp   lse   说明   

原文地址:https://www.cnblogs.com/KIROsola/p/11909323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!