1260 - DFS와 BFS

solution

code

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

void dfs(int node, vector<int> adj[], vector<bool>& visited)
{
    visited[node] = true;
    cout << node << " ";

    for(int i = 0; i < adj[node].size(); i++)
    {
        int neighbor = adj[node][i];
        if(!visited[neighbor])
            dfs(neighbor, adj, visited);
    }
}

void bfs(int start, vector<int> adj[], vector<bool>& visited)
{
    queue<int> q;
    visited[start] = true;
    q.push(start);

    while(!q.empty())
    {
        int node = q.front();
        q.pop();
        cout << node << " ";

        for(int i = 0; i < adj[node].size(); i++)
        {
            int neighbor = adj[node][i];
            if(!visited[neighbor])
            {
                visited[neighbor] = true;
                q.push(neighbor);
            }
        }
    }
}

int main()
{
    int n, m, v;
    cin >> n >> m >> v;
    vector<int> * adj = new vector<int>[n+1];
    for(int i = 0; i < m; i++)
    {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    for(int i = 1; i <= n; i++) sort(adj[i].begin(), adj[i].end());

    vector<bool> visited(n+1, false);
    dfs(v, adj, visited);
    cout << endl;

    visited.assign(n+1, false);
    bfs(v, adj, visited);

    return 0;
}

ref

1260번: DFS와 BFS