萌新不会使用指针,使用数组20pts求助QAQ!
查看原帖
萌新不会使用指针,使用数组20pts求助QAQ!
587819
gzkeylucky楼主2022/6/24 21:32

也不会用容器vector QAQ

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=1e7+5;
int n,m,a,b;
bool visit[maxn];
int head[maxn],Next[maxn];
struct Edge{
    int from,to;    
}edge[maxn];

inline int read()
{ 
    int x=0,f=1; 
    char c=getchar(); 
    while(c<'0'||c>'9')
    {
    if(c=='-') f=-1;
    c=getchar(); 
    } 
    while(c>='0'&&c<='9')
    { 
    x=(x<<3)+(x<<1)+(c^48); 
    c=getchar();
    } 
    return x*f;
}

bool cmp(Edge x,Edge y)
{
    if(x.from==y.from) return x.to>y.to;
    return x.from<y.from;
}

void dfs(int x)
{
    printf("%d ",x);
    visit[x]=true;
    for(int j=head[x];j;j=Next[j])
    {
        if(!visit[edge[j].to])
        dfs(edge[j].to);
    }
}

void bfs(int x)
{
    queue <int> q;
    q.push(x);
    visit[x]=1;
    while(!q.empty())
    {
        for(int j=head[x];visit[edge[j].to]!=1;j=Next[j])
        {
        visit[edge[j].to]=1;
        q.push(edge[j].to);
        }
        printf("%d ",q.front());
        q.pop();            
    }
}

int main()
{
    n=read();m=read();
    for(int i=1;i<=m;++i)
    {
        a=read();
        edge[i].from=a;
        b=read();
        edge[i].to=b;
    }
    sort(edge+1,edge+m+1,cmp);
    for(int i=1;i<=m;++i)
    {
        Next[i]=head[edge[i].from];
        head[edge[i].from]=i;
    }

    for(int i=1;i<=n;++i)
    {
        visit[0]=1;
        if(!visit[i])
        {
            dfs(i);
        }
    }
    printf("\n");
    for(int i=1;i<=n;++i)
    {   
        bfs(i);
    }
    return 0;
}
2022/6/24 21:32
加载中...