help!!!
查看原帖
help!!!
238326
LZL_train楼主2020/8/12 20:58
#include <iostream>
#include <vector>

using namespace std;

const int N = 100000 + 10;

vector<int> G[N];
int Q[N];//bfs所需的队列
int dst[N];//dst[i]表示从起点1到点i的最短路长度 
bool vis[N];
int n, m;
void dfs (int u)
{
	cout<<u<<' ';
    vis[u] = true;
    for (int i = 0; i < G[u].size(); i++)
    {
        int v = G[u][i];
        if (!vis[v]) dfs(v);
    }
    return;
}
void bfs(int s)
{
    int p, q, u, v;
    for (int i=1; i<=n; i++) dst[i] = -1;
    Q[0] = s, dst[s] = 0;
    p = 0, q = 1;
    while (p < q){
        u = Q[p];
        for (int i=0; i<G[u].size(); i++){
            v = G[u][i];
            if (dst[v] == -1){
                dst[v] = dst[u] + 1;
                Q[q++] = v;
            }
        }
        p ++; 
    }
}

int main(){
    int u, v;
    cin>>n>>m;
    for (int i=0; i<m; i++){
        cin>>u>>v;
        G[u].push_back(v);//有向图 
    }
    bfs(1);
    dfs(1);
	for (int i = 1; i <= n; i++)if(!vis[i]) dfs(i);
    cout<<endl;
    for (int i=0; i<n; i++) cout<<Q[i]<<" ";
    return 0;
}
2020/8/12 20:58
加载中...