알고리즘/프로그래머스
프로그래머스 부대복귀 c++
이영재의오른발
2022. 12. 23. 16:14
반응형
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
vector<int> r[100001];
int des;
int minResult = 9999999;
void bfs(int x) {
bool check[100001] = {false,};
queue<pair<int,int>> q;
q.push({x,0});
check[x] = true;
while(!q.empty()) {
int nx = q.front().first;
int cnt = q.front().second;
q.pop();
if(nx == des) {
minResult = min(minResult,cnt);
return;
}
for(int i=0; i<r[nx].size(); i++) {
if(check[r[nx][i]]) continue;
check[r[nx][i]] = true;
q.push({r[nx][i],cnt+1});
}
}
}
vector<int> solution(int n, vector<vector<int>> roads, vector<int> sources, int destination) {
vector<int> answer;
des = destination;
for(int i=0; i<roads.size(); i++) {
int a,b;
a = roads[i][0];
b = roads[i][1];
r[a].push_back(b);
r[b].push_back(a);
}
for(int i=0; i<sources.size(); i++) {
bfs(sources[i]);
if(minResult == 9999999) {
answer.push_back(-1);
}
else {
answer.push_back(minResult);
minResult = 9999999;
}
}
return answer;
}
**
단방향 그래프로 주어진 입력을 양방향 그래프로 바꾼 뒤 bfs 만 잘 써주면 되는 문제
bool check 를 선언해 이미 방문한 지역을 재방문 하지 않도록 해준다.
728x90
반응형