code: def RandomGraph(nodes=range(10), min_links=2, width=400, height=300,
                                  curvature=lambda: random.uniform(1.1, 1.5)):
      
      g = UndirectedGraph()
      g.locations = {}
      ## Build the cities
      for node in nodes:
          g.locations[node] = (random.randrange(width), random.randrange(height))
      ## Build roads from each city to at least min_links nearest neighbors.
      for i in range(min_links):
          for node in nodes:
              if len(g.get(node)) < min_links:
                  here = g.locations[node]
                  def distance_to_node(n):
                      if n is node or g.get(node,n): return infinity
                      return distance(g.locations[n], here)
                  neighbor = argmin(nodes, distance_to_node)
                  d = distance(g.locations[neighbor], here) * curvature()
                  g.connect(node, neighbor, int(d))
      return g
docs: Construct a random graph, with the specified nodes, and random links.
      The nodes are laid out randomly on a (width x height) rectangle.
      Then each node is connected to the min_links nearest neighbors.
      Because inverse links are added, some nodes will have more connections.
      The distance between nodes is the hypotenuse times curvature(),
      where curvature() defaults to a random number between 1.1 and 1.5.