版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
对于这道题我并没有处理重边问题,也没有处理自环问题。