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; }
注意:
cin不会取走\n,所以循环外还有一个getline
getline会取走\n,但\n并不会被放入字符串中,此时把带空格的字符串放入stringstream,即可正常读取数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人