图1-图的遍历

题目描述:
对于一个图,最重要的就是要知道这个图是一个怎样的图。所以我们需要知道与每个点相邻的点有哪些。给出一个无向图,输出每个点相邻的那些点。

输入格式:
共M+1行。
第1行包含2个正整数N,M,表示有N个点,M条边。
第2~M+1行包含2个用空格隔开的正整数u,v,表示一条从u到v的无向路径。注意,可能会有重边和自环,一个点不与自己相邻。

输出格式:
共N行,由小到大输出每个点相邻的点,如果这个点是孤立的,则输出一个空行。

样例1输入:
5 6
1 2
1 3
3 4
4 3
4 5
5 1
样例1输出:
2 3 5
1
1 4
3 5
1 4
约定:
n,m≤200000

水题啊

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
vector<int>g[N];
vector<int>vc;
bool vis[N];
int n,m;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1,x,y;i<=m;++i)
    {
        scanf("%d%d",&x,&y);
        if(x==y)continue;
        g[x].push_back(y);
        g[y].push_back(x);
    }  
    for(int i=1;i<=n;++i)sort(g[i].begin(),g[i].end());
    for(int i=1;i<=n;++i)
    {
        for(int j=0;j<g[i].size();++j)
        {
            int v=g[i][j];
            if(vis[v])continue;
            printf("%d ",v);
            vis[v]=true;
            vc.push_back(v);
        }
        for(int j=0;j<vc.size();++j)
            vis[vc[j]]=false;
        vc.clear();
        puts("");
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zzctommy/p/12322017.html