问题描述
给定一个无向图,用邻接矩阵作为图的存储结构,输出指定顶点出发的深度优先遍历序列。在深度优先遍历的过程中,如果同时出现多个待访问的顶点,则优先选择编号最小的一个进行访问。
输入描述
第一行输入三个正整数,分别表示无向图的顶点数n(2≤n≤100,顶点从1到n编号)、边数m和指定起点编号s。
接下来的m行对应m条边,每行给出两个正整数,分别是该条边直接连通的两个顶点的编号。
输出描述
输出从 s开始的深度优先遍历序列,用一个空格隔开,最后也含有一个空格。如果从 s出发无法遍历到图中的所有顶点,则在第二行输出Non‑connected。
样例输入
5 4 1
1 2
3 1
5 2
2 3
样例输出
1 2 3 5
Non-connected
通过代码:(C语言)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> adj;
vector<bool> visited;
vector<int> result;
void dfs(int v) {
visited[v] = true;
result.push_back(v + 1);
for (int i = 0; i < adj.size(); ++i) {
if (adj[v][i] == 1 && !visited[i]) {
dfs