(機考)無向圖的深度優先搜索


問題描述

已知無向圖的鄰接矩陣,以該矩陣為基礎,給出深度優先搜索遍歷序列,並且給出該無向圖的連通分量的個數。

在遍歷時,當有多個點可選時,優先選擇編號小的頂點。

輸入說明:

         第一行是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);
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM