about summary refs log tree commit diff stats
path: root/go/graph.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/graph.go')
-rw-r--r--go/graph.go43
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)
+	}
+}