https://www.acwing.com/problem/content/922/
#include <bits/stdc++.h> using namespace std; const int N = 505; int n, m; int dist[N], stop[N], q[N]; bool g[N][N]; void bfs() { memset(dist, 0x3f, sizeof dist); dist[1] = 0; int hh = 0, tt = 0; q[0] = 1; while (hh <= tt) { auto t = q[hh ++]; for (int i = 1; i <= n; i ++) if (g[t][i] && dist[i] > dist[t] + 1) { dist[i] = dist[t] + 1; q[++ tt] = i; } } } int main() { cin >> m >> n; string str; getline(cin, str); while (m --) { getline(cin, str); stringstream ssin(str); int cnt = 0, p; while (ssin >> p) stop[cnt ++] = p; for (int i = 0; i < cnt; i ++) for (int j = i + 1; j < cnt; j ++) g[stop[i]][stop[j]] = true; } bfs(); if (dist[n] == 0x3f3f3f3f) cout << "NO" << endl; else cout << max(dist[n] - 1, 0) << endl; return 0; }
标签:cnt,dist,int,stop,用法,++,stringstream,getline From: https://www.cnblogs.com/Leocsse/p/16836571.html