BOJ:11724(์ฐ๊ฒฐ ์์์ ๊ฐ์) ๋ฌธ์ ์ ์ ์ฌํ๋ค.
์ด ๋ฌธ์ ์์๋ ์๋์ ๊ฐ์ ์กฐ๊ฑด์ ํ์ธํ๋ ๊ณผ์ ์ด ์ถ๊ฐ๋๋ค.
์ด๋ถ ๊ทธ๋ํ ํ์ธ ๋ฐฉ๋ฒ
๋ชจ๋ ์ ์ ์ด ์๋ก ์ฐ๊ฒฐ๋์ด ์์ง ์๊ณ , ์์ ์ฐ๊ฒฐ ๊ทธ๋ํ๊ฐ ์๋ ์๋ ์๊ธฐ ๋๋ฌธ์, ์ด๊ธฐ ํ๋๋ง ๊ฐ์ ์ค์ ํ์์ ํ์ง ์๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ๋ชจ๋ ์ ์ ์ ๋ํด BFS ํ์์ ํ๋ค.
#include <bits/stdc++.h> //<stdio.h><stack><queue><deque>
using namespace std;
void DFS(int start, deque<int> *graph, int *color, bool *CheckBipartite){
stack<int> s;
color[start] = start;
s.push(start);
while(!s.empty()){
int current = s.top();
s.pop();
for(int next: graph[current]){
if(color[next] == 0){
s.push(current);
s.push(next);
color[next] = color[current]*-1;
}
else if(color[next] + color[current] != 0){
*CheckBipartite = false;
return;
}
}
}
}
void BFS(int start, deque<int> *graph, int *color, bool *CheckBipartite){
queue<int> q;
color[start] = start; // +start
q.push(start);
//printf("[+] %d visited. color[%d] = %d\n", start, start, color[start]);
while(!q.empty()){
int current = q.front();
q.pop();
for(int num: graph[current]){
if(color[num] == 0){ // if not visited
q.push(num);
color[num] = color[current]*-1; // -start
//printf("[+] %d visited. color[%d] = %d\n", num, num, color[num]);
}
else if(color[num] + color[current] != 0) {
*CheckBipartite = false;
return;
}
}
}
}
int main(){
int K; // K: ํ
์คํธ ์ผ์ด์ค์ ๊ฐ์
scanf("%d", &K);
for(int i=0; i<K; i++){
int V, E; // V: ์ ์ ์ ๊ฐ์, E: ๊ฐ์ ์ ๊ฐ์
scanf("%d %d", &V, &E);
deque<int> graph[V+1];
int color[V+1]; // check not visitied by 0
bool CheckBipartite = true;
fill(color, color+V+1, 0); // initialize
for(int j=0; j<E; j++){
int u, v;
scanf("%d %d", &u, &v);
graph[u].push_back(v);
graph[v].push_back(u);
}
for(int j=1; j<=V; j++){
if(CheckBipartite == false) break;
if(color[j] == 0) BFS(j, graph, color, &CheckBipartite);
//if(color[j] == 0) DFS(j, graph, color, &CheckBipartite);
}
printf("%s\n", CheckBipartite == true ? "YES" : "NO");
}
}
DFS์ ๊ฒฝ์ฐ, stack์ผ๋ก ๊ตฌํํด์ ์ธ์ ํ ๋ ธ๋ push ์ current๋ ๋ฃ์ด์ current์ ์์๋ ธ๋๊น์ง ๋จผ์ ํ์ ํ ์ธ์ ๋ ธ๋๋ฅผ ํ์ํ๋๋ก ํ๋ค.
[๋ฐฑ์ค(BOJ)] 2331๋ฒ: ๋ฐ๋ณต์์ด (DFS/BFS, C++) (0) | 2021.02.26 |
---|---|
[๋ฐฑ์ค(BOJ)] 10451๋ฒ: ์์ด ์ฌ์ดํด (DFS/BFS, C++) (0) | 2021.02.25 |
[๋ฐฑ์ค(BOJ)] 11724๋ฒ: ์ฐ๊ฒฐ ์์์ ๊ฐ์ (DFS/BFS, C++) (0) | 2021.02.25 |
[๋ฐฑ์ค(BOJ)] 2225๋ฒ: ํฉ๋ถํด (Dynamic Programming, C++) (0) | 2021.02.23 |
[๋ฐฑ์ค(BOJ)] 11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ (Dynamic Programming, C++) (0) | 2021.02.23 |