1. 程式人生 > >深度搜索之基本款

深度搜索之基本款

 思路:從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;
}

 對於這道題我並沒有處理重邊問題,也沒有處理自環問題。