package main
import (
"fmt"
)
var (
s [][]int
visited_h []bool
visited_c []bool
p []int
count int
)
func Init(n, m int) { //初始化
var a, b int
count = 0
p = make([]int, 0, 10)
for i := 0; i < 10; i++ { //初始化访问数组
visited_h = append(visited_h, false)
visited_c = append(visited_c, false)
}
visited_c[0] = true
for i := 0; i < 2*n; i++ {
s1 := make([]int, 0, 10)
s = append(s, s1)
}
for i := 0; i < m; i++ {
fmt.Scanln(&a, &b)
s[a] = append(s[a], b)
}
}
func bfs(v int, p []int) {
fmt.Print(v, " ")
length := len(s[v])
for i := 0; i < length; i++ {
if visited_h[s[v][i]] == false {
p = append(p, s[v][i]) //将它的子节点压入栈
count++
visited_h[s[v][i]] = true
}
}
var h int = 9
for j := 0; j <= count; j++ {
if visited_c[j] != true {
h = j
break
}
}
visited_c[h] = true
if h <= count {
bfs(p[h], p)
}
}
func main() {
var n, m, k int
fmt.Println("请输入节点的个数和边数:")
fmt.Scanln(&n, &m)
Init(n, m)
fmt.Println("请输入起始点:")
fmt.Scanln(&k)
p = append(p, k)
visited_h[k] = true
bfs(k, p)
fmt.Println(s)
}