点击查看代码
#include<cstdio>
#include<vector>
using namespace std;
#pragma warning(disable:4996)
const int maxn = 100; //最多有100个顶点
const int INF = 1000000; //INF是一个很大的数,表示两个顶点之间不相连
//1、图的DFS遍历(邻接表存储图)
vector<int> Adj[maxn]; //邻接表,Adj[i]存储所有与顶点i相连的顶点编号
int n; //顶点个数
bool vis[maxn] = { false }; //记录顶点是否已被访问,vis[i]=true表示已访问
void DFS(int u, int depth) { //用DFS遍历当前顶点u,depth是递归深度
vis[u] == true; //设置顶点u已被访问
/* 编写对顶点u的相关操作代码,如输出u */
//枚举u的所有相邻点,对每个相邻点进行访问
for (int i = 0; i < Adj[u].size(); i++) {
int v = Adj[u][i]; //为了方便书写,将顶点编号Adj[u][i]存入变量v中
if (vis[v] == false) { //如果顶点v未被访问
DFS(v, depth + 1); //则递归访问顶点v,深度加一
}
}
}
//用DFS遍历图G
void DFSTrave() {
for (int u = 0; u < n; u++) { //枚举所有顶点
if (vis[u] == false) { //如果顶点u未被访问
DFS(u, 1); //则递归访问顶点u所在的连通块,深度为1表示第一层
}
}
}
//2、图的DFS遍历(邻接矩阵存储图)
int n, G[maxn][maxn]; //顶点个数,邻接矩阵
bool vis[maxn] = { false }; //记录顶点是否已被访问,vis[i]=true表示已访问
//用DFS遍历当前顶点u,depth是递归深度
void DFS(int u, int depth) {
vis[u] = true; //顶点u已被访问设为true
/* 编写对顶点u的相关操作代码,如输出u */
//枚举u的所有相邻点,对每个相邻点进行访问
for (int v = 0; v < n; v++) {
//如果顶点v未访问,且顶点u和v之间相连
if (vis[v] == false && G[u][v] != INF) {
DFS(v, depth + 1); //则递归访问顶点v,深度加一
}
}
}
//用DFS遍历图G
void DFSTrave() {
for (int u = 0; u < n; u++) { //枚举所有顶点u
if (vis[u] == false) { //如果顶点u未被访问
DFS(u, 1); //则递归访问顶点u所在的连通块,深度为1表示第一层
}
}
}