[๋ฐฑ์ค] 13023๋ฒ - ABCDE (C++)
13023๋ฒ: ABCDE
๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๋ A, B, C, D, E๊ฐ ์กด์ฌํ๋ฉด 1์ ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
www.acmicpc.net
๋ฌธ์
BOJ ์๊ณ ๋ฆฌ์ฆ ์บ ํ์๋ ์ด N๋ช ์ด ์ฐธ๊ฐํ๊ณ ์๋ค. ์ฌ๋๋ค์ 0๋ฒ๋ถํฐ N-1๋ฒ์ผ๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , ์ผ๋ถ ์ฌ๋๋ค์ ์น๊ตฌ์ด๋ค.
์ค๋์ ๋ค์๊ณผ ๊ฐ์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ฌ๋ A, B, C, D, E๊ฐ ์กด์ฌํ๋์ง ๊ตฌํด๋ณด๋ ค๊ณ ํ๋ค.
- A๋ B์ ์น๊ตฌ๋ค.
- B๋ C์ ์น๊ตฌ๋ค.
- C๋ D์ ์น๊ตฌ๋ค.
- D๋ E์ ์น๊ตฌ๋ค.
์์ ๊ฐ์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์กด์ฌํ๋์ง ์ํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N (5 ≤ N ≤ 2000)๊ณผ ์น๊ตฌ ๊ด๊ณ์ ์ M (1 ≤ M ≤ 2000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ์ ์ a์ b๊ฐ ์ฃผ์ด์ง๋ฉฐ, a์ b๊ฐ ์น๊ตฌ๋ผ๋ ๋ป์ด๋ค. (0 ≤ a, b ≤ N-1, a ≠ b) ๊ฐ์ ์น๊ตฌ ๊ด๊ณ๊ฐ ๋ ๋ฒ ์ด์ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๋ A, B, C, D, E๊ฐ ์กด์ฌํ๋ฉด 1์ ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
ํ์ด๊ณผ์
- vector node : ์ค์ง์ ์ผ๋ก ๋ ธ๋๊ฐ์ ๊ฐ์ ์ ๋ณด๊ฐ ๋ด๊ธฐ๋ ๋ถ๋ถ
- bool visited : ๋ฐฉ๋ฌธํ ๋ ธ๋์ธ์ง ์๋์ง ํ์ธํ๋ ๋ถ๋ถ
- flag : 5๋ช ์ด ์ผ์๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ฃผ๋ ํํธ
dfs์ cktracking ์ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋๋ฐ ๋์๊ฐ์ผํ๋ ๊ฒฝ์ฐ visitied๋ฅผ false๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ.
code
#include <iostream>
#include <vector>
#include <stack>
std::vector <int> node[2001];
bool visited[2001];
bool flag;
void dfs(int cnt, int n, int count)
{
if (flag) return ;
if (count == 5 && !flag)
flag = true;
visited[cnt] = true;
for (int i = 0; i < node[cnt].size(); i++) {
int next = node[cnt][i];
if (!visited[next]) {
dfs(next, n, count + 1);
}
}
visited[cnt] = false;
}
int main(void)
{
int n, m, a, b;
std::cin >> n >> m;
for (int i = 0; i < m; i++) {
std::cin >> a >> b;
node[a].push_back(b);
node[b].push_back(a);
}
for (int i = 0; i < n; i++) {
dfs(i, n, 1);
}
if (flag) std::cout << "1" << "\n";
else std::cout << "0" << "\n";
return (0);
}
ํ๊ธฐ
์๋นํ ์ด๋ ต๋ค. ๋์ค์ ๋ค์ ๋์ ํด๋ด์ผํ ๋ฌธ์