728x90
문제 링크
풀이 아이디어
최단거리 문제니까 당연히 dfs가 아닌 bfs를 이용해서 푸는 것이다.
노드번호와 cost의 쌍을 큐에 넣고 bfs돌리면 쉽게 풀 수 있다.
문제는 메모리!
아래 주석 친 부분에 처음에 if-return문을 넣었다가 메모리 초과가 떴었다.
BFS 조건 판단은 반드시 방문여부 체크한 후에 하기!!
코드
#include <bits/stdc++.h>
using namespace std;
vector<int> tree[101];
bool visited[101];
int bfs(int a, int b){
queue<pair<int,int>> q;
q.push({a,0});
visited[a]=true;
while(!q.empty()){
int front = q.front().first;
int cost = q.front().second;
q.pop();
for(int i=0; i<tree[front].size(); i++){
// if문이 여기 들어가는 순간 메모리 초과가 뜨는거다.
// if(tree[front][i]==b){
// return cost+1;
// }
if(!visited[tree[front][i]]){
visited[tree[front][i]]=true;
if(tree[front][i]==b){
return cost+1;
}
q.push({tree[front][i],cost+1});
}
}
}
return -1;
}
int main(void){
int n,s,e,m,a,b;
cin>>n>>s>>e>>m;
for(int i=0; i<m; i++){
cin>>a>>b;
tree[a].push_back(b);
tree[b].push_back(a);
}
cout<<bfs(s,e);
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 1620 - 나는야 포켓몬 마스터 이다솜 (0) | 2021.01.06 |
---|---|
백준 2565 전깃줄 - 아이디어가 중요한 DP 문제 (0) | 2021.01.06 |
ACM craft - 테스트케이스 while(t--) 스타일 문제, 위상정렬 (0) | 2021.01.04 |
백준 3190 뱀 - 앞뒤로 넣고 빼야 될 때는 deque를 활용하자! (0) | 2021.01.02 |
백준 3055 탈출 - 확산하는 물체가 2개 있을때 bfs를 돌려야 한다면? (0) | 2021.01.01 |