File tree 1 file changed +46
-0
lines changed
1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
1
+ func IsNonCyclic (edges [][]int ) bool {
2
+ adjList := make (map [int ][]int )
3
+ for _ , edge := range edges {
4
+ node1 , node2 := edge [0 ], edge [1 ]
5
+ _ , ok := adjList [node1 ]
6
+ if ! ok {
7
+ adjList [node1 ] = []int {node2 }
8
+ }else {
9
+ adjList [node1 ] = append (adjList [node1 ], node2 )
10
+ }
11
+ }
12
+ visited := make (map [int ]int )
13
+ for node := range adjList {
14
+ if visited [node ] == 1 {
15
+ continue
16
+ }
17
+ if ! dfs (node , adjList , & visited ){
18
+ return false
19
+ }
20
+ }
21
+ return true
22
+ }
23
+ func dfs (node int , adjList map [int ][]int , visited * map [int ]int ) bool {
24
+ neighbourArr , ok := adjList [node ]
25
+ if ! ok {
26
+ return true
27
+ }
28
+
29
+ if (* visited )[node ] == - 1 {
30
+ return false
31
+ }
32
+
33
+ if (* visited )[node ] == 1 {
34
+ return true
35
+ }
36
+
37
+ (* visited )[node ] = - 1
38
+
39
+ for _ , neighbour := range neighbourArr {
40
+ if ! dfs (neighbour , adjList , visited ){
41
+ return false
42
+ }
43
+ }
44
+ (* visited )[node ] = 1
45
+ return true
46
+ }
You can’t perform that action at this time.
0 commit comments