深度搜索之基本款
阿新 • • 發佈:2018-11-12
思路:從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; }
對於這道題我並沒有處理重邊問題,也沒有處理自環問題。