/
graph_connected.go
82 lines (70 loc) · 1.04 KB
/
graph_connected.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package main
import (
"fmt"
"github.com/iyoo14/goalgo/lib"
)
const (
MAX = 10
NIL = -1
)
var n int
var G [MAX]lib.Vector
var color [MAX]int
func dfs(r int, c int) {
s := lib.NewStack(MAX)
s.Push(r)
color[r] = c
for !s.IsEmpty() {
u := s.Top()
s.Pop()
gu := G[u.(int)]
for i := 0; i < gu.Size(); i++ {
v := gu.V[i]
if color[v] == NIL {
color[v] = c
s.Push(v)
}
}
}
}
func assignColor() {
id := 1
for i := 0; i < n; i++ {
color[i] = NIL
}
for u := 0; u < n; u++ {
if color[u] == NIL {
dfs(u, id)
id++
}
}
}
func main() {
var s, t, m, q int
fmt.Scanf("%d", &n)
fmt.Scanf("%d", &m)
for i := 0; i < n; i++ {
G[i] = lib.NewVector(MAX)
}
for i := 0; i < m; i++ {
fmt.Scanf("%d", &s)
fmt.Scanf("%d", &t)
vs := G[s]
vs.PushBack(t)
vt := G[t]
vt.PushBack(s)
}
fmt.Println(G)
assignColor()
fmt.Scanf("%d", &q)
fmt.Println(color)
for i := 0; i < q; i++ {
fmt.Scanf("%d", &s)
fmt.Scanf("%d", &t)
if color[s] == color[t] {
fmt.Println("yes")
} else {
fmt.Println("no")
}
}
}