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,即可正常读取数据。

posted @   80k  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示