()
| 147 | } |
| 148 | |
| 149 | func generateTree() *Tree { |
| 150 | rnd := rand.New(rand.NewSource(time.Now().UnixNano())) |
| 151 | |
| 152 | const MAXVERTEX int = 2000 |
| 153 | var numbersVertex int = rnd.Intn(MAXVERTEX) + 1 |
| 154 | var root int = rnd.Intn(numbersVertex) |
| 155 | var edges []TreeEdge |
| 156 | |
| 157 | var fullGraph []TreeEdge |
| 158 | for u := 0; u < numbersVertex; u++ { |
| 159 | for v := 0; v < numbersVertex; v++ { |
| 160 | fullGraph = append(fullGraph, TreeEdge{ |
| 161 | from: u, |
| 162 | to: v, |
| 163 | }) |
| 164 | } |
| 165 | } |
| 166 | rnd.Shuffle(len(fullGraph), func(i, j int) { |
| 167 | fullGraph[i], fullGraph[j] = fullGraph[j], fullGraph[i] |
| 168 | }) |
| 169 | |
| 170 | par := make([]int, numbersVertex) |
| 171 | for u := 0; u < numbersVertex; u++ { |
| 172 | par[u] = u |
| 173 | } |
| 174 | |
| 175 | var findp func(int) int |
| 176 | findp = func(u int) int { |
| 177 | if u == par[u] { |
| 178 | return u |
| 179 | } else { |
| 180 | par[u] = findp(par[u]) |
| 181 | return par[u] |
| 182 | } |
| 183 | } |
| 184 | |
| 185 | join := func(u, v int) bool { |
| 186 | u, v = findp(u), findp(v) |
| 187 | if u == v { |
| 188 | return false |
| 189 | } |
| 190 | par[v] = u |
| 191 | return true |
| 192 | } |
| 193 | |
| 194 | for _, e := range fullGraph { |
| 195 | if join(e.from, e.to) == true { |
| 196 | edges = append(edges, e) |
| 197 | } |
| 198 | } |
| 199 | |
| 200 | return NewTree(numbersVertex, root, edges) |
| 201 | } |
| 202 | |
| 203 | func generateQuery(tree *Tree) []Query { |
| 204 | rnd := rand.New(rand.NewSource(time.Now().UnixNano())) |
no test coverage detected