记录 code:
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
struct node {
int v, w;
node() {}
node(int v, int w) : v(v), w(w) {}
bool operator < (const node &b) const { return w > b.w; }
};
int k, a[50005], d[505];
vector<node> G[505];
bool vis[505];
void dijkstra(int n) {
priority_queue<node> q;
memset(vis, 0, sizeof(vis));
memset(d, 0x3f, sizeof(d));
d[1] = 0;
q.push(node(1, 0));
while (!q.empty()) {
node temp = q.top();
q.pop();
int u = temp.v;
if (vis[u]) {
continue;
}
vis[u] = 1;
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i].v, w = G[u][i].w;
if (d[v] > d[u] + w) {
d[v] = d[u] + w;
q.push(node(v, d[v]));
}
}
}
if (d[n] == inf) {
cout << "NO" << endl;
} else {
cout << d[n] - 1 << endl;
}
}
int main() {
int m, n;
scanf("%d%d", &m, &n);
string ss;
getline(cin, ss);
for (int i = 1; i <= m; i++) {
int p = 0;
string s;
getline(cin, s);
for (int j = 0; j < s.size(); j++) {
int sum = 0;
if (s[j] != ' ') {
while (j < s.size() && s[j] != ' ') {
sum = sum * 10 + (s[j++] - '0');
}
}
a[++p] = sum;
}
for (int j = 1; j < p; j++) {
for (int l = j + 1; l <= p; l++) {
G[a[j]].push_back(node(a[l], 1));
}
}
}
dijkstra(n);
return 0;
}