class Vertex:

  def __init__(self, key):
    self.id = key
    self.connectedTo = {}
    # {vertex: value(cost)}


  def addNeighbor(self, nbr, weight=0):
    self.connectedTo[nbr] = weight

  def getConnections(self):
    return self.connectedTo.keys()

  def getId(self):
    return self.id

  def getWeight(self,nbr):
    return self.connectedTo[nbr]

  def __str__(self):
    return str(self.id) + ' connected to: ' + str([x.id for x in self.connectedTo])


class Graph:

  def __init__(self):
    self.vertList = {}
    self.numVertices = 0


  def addVertex(self, key):
    self.numVertices += 1
    newVertex = Vertex(key)
    self.vertList[key] = newVertex
    return newVertex


  def getVertex(self,n):
    # d = {'k1': 1}
    # if 'k1' in d: 다
    #   print 'in dictionary'
    # if 1 in d.values:
    #   print 'in dictionary'
    # => default는 d.keys다

    if n in self.vertList:
      return self.vertList[n]
    else:
      return None

  def addEdge(self, f, t, cost=0):
    # f == from vertex
    # t == to vertex
    if f not in self.vertList:
      # nv == new vertex
      nv = self.addVertex(f)

    if f not in self.vertList:
      # nv == new vertex
      nv = self.addVertex(t)

    self.vertList[f].addNeighbor(self.vertList[t],cost)

  def getVertices(self):
    return self.vertList.keys()
    # 모든 키를 반환한다.

  def __iter__(self):
    return iter(self.vertList.values())

  def __contains__(self,n):
    return n in self.vertList


g = Graph()
for i in range(6):
  g.addVertex(i)

print(g.vertList)
g.addEdge(0,1,2)
g.addEdge(0,2,200)
g.addEdge(0,3,200)
# from 0 to 1 cost is 2
for vertex in g:
  print(vertex)
  keys = vertex.getConnections()
  print(keys)
  if len(keys) > 0:
    for key in keys:
      print(vertex.getWeight(key))
  print('\n')

results matching ""

    No results matching ""