백준/백준-C++

1260번: DFS와 BFS

Beabletoet 2017. 6. 9. 00:55

#include<cstdio>

#include<queue>

using namespace std;

bool point[1001][1001];

bool point2[1001][1001];

bool bfsVisit[1001];

queue<int> q;

int n, m, v;

void dfs(int now);

void bfs(int now);

int main()

{

scanf("%d %d %d", &n, &m, &v);

for (int i = 0, s, f; i < m; ++i)

{

scanf("%d %d", &s, &f);

point[s][f] = 1;

point[f][s] = 1;

point2[s][f] = 1;

point2[f][s] = 1;

}

dfs(v);

bfs(v);

void dfs(int now)

{

if (point[now][0]++ == 0)

printf("%d ", now);

for (int i = 1; i <= n; ++i)

if (point[now][i] == 1)

{

point[now][i] = 0;

for (int j = 1; j <= n; ++j)

point[j][now] = 0;

dfs(i);

}

}

void bfs(int now)

{

bfsVisit[now] = 1;

printf("\n%d ", now);

q.push(now);

while (!q.empty())

{

now = q.front();

q.pop();

for (int i = 1; i <= n; ++i)

if (point2[now][i] && !bfsVisit[i])

{

++bfsVisit[i];

printf("%d ", i);

q.push(i);

}

}

}