미래에 하이퍼 튜브라는 시스템이 있다. 하이퍼 튜브는 $K$개의 역을 서로 연결해주는 역할을 하고, 총 $M$개의 하이퍼 튜브가 존재한다. 이 때, 1번 역에서 $N$번째 역까지 이동하는 데 방문하는 최소 역의 수를 출력하는 문제이다.
보통 그래프를 구성할 때, $vector<vector
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int,int> ii;
const int inf = 987654321;
int N,K,M;
vector<vector<int> > v;
int d[111111];
int main() {
scanf("%d%d%d",&N,&K,&M);
v.resize(N+M+K+1);
for ( int i = 1 ; i <= M ; i++ )
for ( int j = 0 ; j < K ; j++ ) {
int t ;
scanf("%d",&t);
v[t].push_back(i+N);
v[i+N].push_back(t);
}
memset(d,-1,sizeof(d));
d[1] = 0;
queue<int> q;
q.push(1);
while ( !q.empty() && !(~d[N]) ) {
int now=q.front();q.pop();
for ( int i = 0 ; i < v[now].size() ; i++ )
if ( !(~d[v[now][i]]) ) {
d[v[now][i]] = d[now]+1;
q.push(v[now][i]);
}
}
printf("%d\n",d[N]<0?-1:(d[N]/2+1));
return 0;
}블로그를 잠시 쉬었으나 다시시작!