Exemplo n.º 1
0
def main(args):

    # TODO:  add proper TESTs to initialize Graph and Vertex with graph example from GeeksForGeeks!

    # print type(Graph)
    # print dir(Graph)

    # print type(Vertex)
    # print dir(Vertex)
    # help(Vertex.__init__)

    # print dir(PriorityQueue)

    vertex0 = Vertex(0)
    vertex0.setDistance(0)
    # print vertex0

    vertex1 = Vertex(1)
    # print vertex1

    vertex7 = Vertex(7)
    # print vertex7

    vertex2 = Vertex(2)
    # print vertex2

    graph1 = Graph()
    graph1.addVertex(vertex0)
    graph1.addVertex(vertex1)
    graph1.addVertex(vertex7)
    graph1.addVertex(vertex2)

    print 'Initialized Vertex Dump:'
    # for aVertex in graph1.getVertices():
    #     print aVertex

    print 'Initialized Edges Dump:'
    graph1.addEdge(vertex0, vertex1, 4)
    graph1.addEdge(vertex0, vertex7, 8)
    graph1.addEdge(vertex1, vertex2, 8)

    print 'Vertex Sequenced after Djikstra from starting point with key 0'
    try:
        dijkstra(graph1, vertex0)
        for aVertex in graph1.getVertices():
            print aVertex
    except Exception as ex:
        logging.exception("BURP!")
Exemplo n.º 2
0
def main():
     #file opening
     alphabet = "abcdefghijklmnopqrstuvwxyz"
     #file parsing
     word = []
     for line in fileinput.input():
          x = line.strip()
          t = x.lower()
          word.append(t)
     fileinput.close()
     g = Graph()     
     for i in word:
          vertlist = g.getVertices()
          if i not in vertlist:
               g.addVertex(i)
          #vert0 = g.getVertex(i)
          fhalf = shalf = []
          tmp = []
          
          for idx,ch in enumerate(i):
               l = list(i)
               for a in alphabet:
                    l[idx] = a
                    final = "".join(l)
                    if final in word and final not in vertlist:
                         g.addVertex(final)
                         vertlist = g.getVertices()
                    if final in word and final in vertlist:
                         #vert1 = g.getVertex(final)
                         g.addEdge(i, final)                     
                         g.addEdge(final, i)
          go = g.getVertex(i)
          s = go.getConnections()
          print i, len(s)

     return 0
Exemplo n.º 3
0
        if f not in self.vertList:
            self.addVertex(f)
        if t not in self.vertList:
            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())


g = Graph()
for i in range(6):
    g.addVertex(i)
g.addEdge(0, 1, '01')
g.addEdge(1, 2, '12')
g.addEdge(2, 3, '23')
g.addEdge(3, 4, '34')
g.addEdge(4, 5, '45')
g.addEdge(5, 0, '50')
for v in g:
    for w in v.getConnections():
        print('(%s, %s, %s)' % (v.getId(), w.getId(), v.getWeight(w)))

#构建字梯图
from pythonds.graphs import Graph


def buildGraph(wordFile):
Exemplo n.º 4
0
from pythonds.graphs import Graph
from pythonds.basic import Queue
queue=Queue()
graph=Graph();
start=graph.addVertex("0,0")

def extractQuantity(quantities):
    quants=quantities.split(",")
    return [int(quants[0]),int(quants[1])]

def makeVertex(list):
    newList=[str(list[0]),str(list[1])]
    return ",".join(newList)

def findPossibleChildrens(vertex,q1,q2):
    childrens=[]
    quantities=extractQuantity(vertex.getId())
    quant1=quantities[0]
    quant2=quantities[1]
    # first quantity to river
    if not quant1==0:
        childrens.append(makeVertex([0,quant2]))
        if not quant2==q2:
            canHold=q2-quant2
            if(canHold>=quant1):
                temp2=quant2+quant1
                temp1=0
            else:
                temp2=canHold
                temp1=abs(canHold-quant1)
            childrens.append(makeVertex([temp1,temp2]))
#        5: [2],
#        6: [5],
#        7: [3, 6],
#        8: [4, 7] }

graph = {1: [2, 8],
        2: [1, 8, 3],
        3: [2, 4, 6, 9],
        4: [3, 5, 6],
        5: [4, 6],
        6: [3, 5, 7, 4],
        7: [6, 8, 9],
        8: [1, 2, 7, 9],
        9: [3, 7, 8]}

# 1. Create graph
graphl = Graph()

for k,v in graph.iteritems():
    graphl.addVertex(k)
    for i in v:
        graphl.addEdge(k, i)

# 2. Draw the graph
draw_graph(graph, len(edges) )

# 3. Run the algorithm
dfs(graphl)

pause(30)
Exemplo n.º 6
0
        if not done:
            path.pop()
            u.setColor('white')
    #搜索成功
    else:
        done = True
        #将路径上的点都打印出来
        for each in path:
            print(each.id)
    return done


'''建图'''
g = Graph()
for each in 'ABCDEF':
    g.addVertex(each)
g.addEdge('A', 'B', 1)
g.addEdge('A', 'D', 1)
g.addEdge('B', 'D', 1)
g.addEdge('B', 'C', 1)
g.addEdge('C', '', 1)
g.addEdge('D', 'E', 1)
g.addEdge('E', 'B', 1)
g.addEdge('E', 'F', 1)
g.addEdge('F', 'C', 1)

A = g.getVertex('A')

lst = []
print(knightTour(1, lst, A, 6))
Exemplo n.º 7
0
class SearchTrees:
    def __init__(self):
        self.d = {}
        self.g = Graph()
        self.ve = Vertex
        self.lines = []
        self.spe = [[], []]
        self.x = 0

        with open("content/C_10_50.mis", encoding='UTF-8') as f:
            sizes = f.readline()
            sp = sizes.split(" ")
            # print(sp)
            amt_node = int(sp[2])
            # print(amt_node)
            amt_edges = int(sp[3])
            next(f)
            self.lines = f.readlines()
            f.close()
        for i in self.lines:
            x = i[:-1].split(' ', 3)
            self.spe[0].append(x[1])
            self.spe[1].append(x[2])
        # self.g = Graph()
        for i in range(int(amt_node)):
            self.g.addVertex(i)
            self.g.addEdge((int(self.spe[1][i])), int(self.spe[0][i]))

    def build_graph(self, wordFile):
        self.d = {}
        self.g = Graph()
        wfile = open(wordFile, 'r')
        # create buckets of words that differ by one letter
        for line in wfile:
            word = line[:-1]
            for i in range(len(word)):
                bucket = word[:i] + '_' + word[i + 1:]
                if bucket in self.d:
                    self.d[bucket].append(word)
                else:
                    self.d[bucket] = [word]
                    # add vertices and edges for words in the same bucket
        for bucket in self.d.keys():
            for word1 in self.d[bucket]:
                for word2 in self.d[bucket]:
                    if word1 != word2:
                        self.g.addEdge(word1, word2)
        return self.g

    def check_graph(self, g):
        for v in g:
            for w in v.getConnections():
                print("(  %s  ,  %s  )" % (v.getId(), w.getId()))

    def bfs(self, g, start):
        start.setDistance(0)
        start.setPred(None)
        vertQueue = Queue()
        vertQueue.enqueue(start)
        while vertQueue.size() > 0:
            currentVert = vertQueue.dequeue()
            for nbr in currentVert.getConnections():
                # print(nbr)
                if nbr.getColor() == 'white':
                    nbr.setColor('gray')
                    nbr.setDistance(currentVert.getDistance() + 1)
                    nbr.setPred(currentVert)
                    vertQueue.enqueue(nbr)
            currentVert.setColor('black')

    def traverse(self, y):
        x = y
        while x.getPred():
            print(x.getId())
            x = x.getPred()
        print(x.getId())

    def prim(self, g, start):
        pq = PriorityQueue()
        for v in g:
            print(v)
            v.setDistance(sys.maxsize)
            v.setPred(None)
        start.setDistance(0)
        pq.buildHeap([(v.getDistance(), v) for v in g])
        while not pq.isEmpty():
            currentVert = pq.delMin()
            for nextVert in currentVert.getConnections():
                # print(nextVert)
                newCost = currentVert.getWeight(nextVert)
                if nextVert in pq and newCost < nextVert.getDistance():
                    nextVert.setPred(currentVert)
                    nextVert.setDistance(newCost)
                    pq.decreaseKey(nextVert, newCost)