프로그래밍/백준 알고리즘
백준 알고리즘 2644번 - 촌수계산
good programmer
2019. 7. 9. 14:19
전형적인 bfs를 이용해서 푸는 문제.
시간 복잡도 : bfs이고, 인접행렬로 구했으므로 o(n^2)
소스코드
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
int connected[101][101]={0,};
bool visited[101]={false,};
int counts[101]={0,};
int p,rel,from,to;
void bfs(int start)
{
visited[start]=1;
queue<int> q;
q.push(start);
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=1;i<=p;i++){
if(connected[now][i]==1 && !visited[i]){
counts[i]=counts[now]+1;
q.push(i);
visited[i]=1;
}
}
}
}
int main()
{
cin>>p>>from>>to>>rel;
for(int i=1;i<=rel;i++){
int a,b;
cin>>a>>b;
connected[a][b]=1;
connected[b][a]=1;
}
bfs(from);
if(counts[to]==0) cout<<"-1";
else cout<<counts[to];
}