深度搜索之基本款

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37806112/article/details/83930145

 思路:从1号节点出发开始遍历。如果遍历结束时所有visited[]数组的值全都是true,那么就说明整个图是连通的,否则就不是。

#include <iostream>
#include <vector>
using namespace std;
int m, n;
vector<int> g[100001];
bool visited[100001], ans;

void dfs(int x)
{
	visited[x] = true;
	for (int i:g[x])
	{
		if (!visited[i])
		{
			dfs(i);
		}
	}
}
int main()
{
	//n 顶点数 m 边数
	cin >> n >> m;
	for (int i = 0; i < n;i++)
	{
		visited[i] = false;
	}
	for (int i = 0; i < m;i++)
	{
		int u, v;
		cin >> u >> v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1);
	ans = true;
	for (int i = 1; i <= n;i++)
	{
		ans = ans&&visited[i];
	}
	if (ans)
	{
		cout << "YES" << endl;
	}
	else
	{
		cout << "NO" << endl;
	}
	return 0;
}

 对于这道题我并没有处理重边问题,也没有处理自环问题。

猜你喜欢

转载自blog.csdn.net/m0_37806112/article/details/83930145
今日推荐