about summary refs log blame commit diff stats
path: root/go/graph.go
blob: 6c306c506ff4b7795b777d12d8b05e87c4ed1d60 (plain) (tree)










































                                                                      
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)
	}
}