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 @ 2022-09-05 16:23  80k  阅读(23)  评论(0编辑  收藏  举报