#include <stdio.h>
#include <deque>
#include <queue>
#include <algorithm>
using namespace std;
int BFS(int target1, int target2, deque<int> *graph, bool *visited, deque<int> *child){
queue<int> q;
visited[target1] = true; // check visited
q.push(target1);
(*child)[target1] = 0;
while(!q.empty()){
int current = q.front(); // get front element from queue
q.pop(); // pop front element
for(int num: graph[current]){
if(visited[num] == false){
q.push(num);
visited[num] = true;
(*child)[num] = (*child)[current] + 1;
if(num == target2) return (*child)[num];
}
}
}
return -1; //queue๊ฐ empty๊ฐ ๋์ด๋ num == target2์ธ ์กฐ๊ฑด์ด ์์ด์ ๋ฆฌํดํ์ง ๋ชปํจ == target2 ์ฐพ์ง ๋ชปํจ == target2๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์
}
int main(){
int n, m, target1, target2; // n: # of nodes, m: # of edges
scanf("%d", &n);
scanf("%d %d", &target1, &target2);
scanf("%d", &m);
deque<int> graph[n];
deque<int> child[n]; // parent - child
bool visited[n]; // check if visited
fill(visited, visited+n, false);
for(int i=0; i<m; i++)
{
int u,v, result;
scanf("%d %d", &u, &v);
graph[u-1].push_back(v-1);
graph[v-1].push_back(u-1);
}
int result = BFS(target1-1, target2-1, graph, visited, child);
printf("%d\n", result);
}
#include <stdio.h>
#include <deque>
#include <queue>
#include <algorithm>
using namespace std;
int BFS(int target1, int target2, deque<int> *graph, bool *visited, deque<int> *child){
queue<int> q;
visited[target1] = true; // check visited
printf("[+] %d VISITED\n", target1);
q.push(target1);
(*child)[target1] = 0;
while(!q.empty()){
int current = q.front(); // get front element from queue
q.pop(); // pop front element
for(int num: graph[current]){
if(visited[num] == false){
q.push(num);
visited[num] = true;
(*child)[num] = (*child)[current] + 1; printf("%d: %d\n", num, (*child)[num]);
printf("[+] %d VISITED\n", num);
if(num == target2) return (*child)[num];
}
}
}
return -1; //queue๊ฐ empty๊ฐ ๋์ด๋ num == target2์ธ ์กฐ๊ฑด์ด ์์ด์ ๋ฆฌํดํ์ง ๋ชปํจ == target2 ์ฐพ์ง ๋ชปํจ == target2๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์
}
int main(){
int n, m, target1, target2; // n: # of nodes, m: # of edges
scanf("%d", &n);
scanf("%d %d", &target1, &target2);
scanf("%d", &m);
deque<int> graph[n];
deque<int> child[n]; // parent - child
bool visited[n]; // check if visited
fill(visited, visited+n, false);
for(int i=0; i<m; i++)
{
int u,v, result;
scanf("%d %d", &u, &v);
graph[u-1].push_back(v-1);
graph[v-1].push_back(u-1);
}
int result = BFS(target1-1, target2-1, graph, visited, child);
printf("%d\n", result);
}
[๋ฐฑ์ค(BOJ)] 1000๋ฒ: A+B (์ ์ถ๋ ฅ, C++) (0) | 2021.02.10 |
---|---|
[๋ฐฑ์ค(BOJ)] 2557๋ฒ: Hello World (์ ์ถ๋ ฅ, C++) (0) | 2021.02.10 |
[๋ฐฑ์ค(BOJ)] 1182๋ฒ: ๋ถ๋ถ์์ด์ ํฉ (๋ฐฑํธ๋ํน(Backtracking), C++) (0) | 2021.02.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (DFS/BFS, C++) (0) | 2021.02.02 |
[๋ฐฑ์ค(BOJ)] 1620๋ฒ: ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์ (Hash, C++) (0) | 2021.01.29 |