diff options
Diffstat (limited to 'go/graph.go')
-rw-r--r-- | go/graph.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/go/graph.go b/go/graph.go new file mode 100644 index 0000000..6c306c5 --- /dev/null +++ b/go/graph.go @@ -0,0 +1,43 @@ +package main + +import ( + "fmt" + "math/rand" + "time" +) + +type Graph struct { + adjacencyList map[int][]int +} + +func NewGraph() *Graph { + return &Graph{adjacencyList: make(map[int][]int)} +} + +func (g *Graph) addEdge(node1, node2 int) { + g.adjacencyList[node1] = append(g.adjacencyList[node1], node2) + g.adjacencyList[node2] = append(g.adjacencyList[node2], node1) +} + +func generateConnectedGraph(n int) *Graph { + rand.Seed(time.Now().UnixNano()) + graph := NewGraph() + + // Start with node 0 + for i := 1; i < n; i++ { + // Connect the new node i to a random existing node + existingNode := rand.Intn(i) + graph.addEdge(i, existingNode) + } + + return graph +} + +func main() { + graph := generateConnectedGraph(100) + + // Print the adjacency list to show the graph + for node, edges := range graph.adjacencyList { + fmt.Printf("Node %d: %v\n", node, edges) + } +} |