深度优先搜索

2017-05-06  本文已影响0人  海卓治
#include <bits/stdc++.h>
#define N 10001
using namespace std;
struct Edge {
    int x, y, z, next;
    Edge(int x = 0, int y = 0, int z = 0, int next = 0) :
        x(x), y(y), z(z), next(next) {}
} edge[N * 2];

bool vis[N];
int head[N], sumedge;
int n, m;

void dfs(int x, int p) {
    printf("%d ", x);
    vis[x] = true;
    for (int u = head[x]; u; u = edge[u].next) {
        if (!vis[edge[u].y] && edge[u].z && edge[u].y != p) {
            dfs(edge[u].y ,x);
        }
    }
}

void ins(int x, int y) {
    edge[++sumedge] = Edge(x, y, 1, head[x]);
    head[x] = sumedge;
    return;
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i++) {
        int x, y;
        scanf("%d%d", &x, &y);
        ins(x, y);
    }
    dfs(1, -1);
}
上一篇下一篇

猜你喜欢

热点阅读