stringstream搭配getline解决每行不定数量的输入问题
作者:互联网
例题:
https://www.acwing.com/problem/content/description/922/
代码:
#include<bits/stdc++.h> using namespace std; int m, n; bool A_M[510][510]; int dis[510]; int stop[510]; bool vis[510]; void BFS() { deque<int> que; que.push_back(1); memset(dis, 0x3f, sizeof(dis)); dis[1] = 0; while (que.size()) { int u = que.front(); que.pop_front(); for (int i = 1; i <= n; i++) { if (A_M[u][i] && dis[u] + 1 < dis[i]) { dis[i] = dis[u] + 1; que.push_back(i); } } } } int main() { cin >> m >> n; string str; getline(cin,str); while (m--) { getline(cin, str); stringstream sin(str); int cnt = 0; int cur; while (sin >> cur) { stop[cnt++] = cur; } for (int i = 0; i < cnt; i++) { for (int j = i + 1; j < cnt; j++) { A_M[stop[i]][stop[j]] = true; } } } BFS(); if(n==1) cout<<0<<endl; else if(dis[n]==0x3f3f3f3f) cout<<"NO"<<endl; else cout<<dis[n]-1<<endl; }View Code
注意:
cin不会取走\n,所以循环外还有一个getline
getline会取走\n,但\n并不会被放入字符串中,此时把带空格的字符串放入stringstream,即可正常读取数据。
标签:cnt,每行,int,que,stringstream,510,getline,dis 来源: https://www.cnblogs.com/ydUESTC/p/16658611.html