def randGraph():
    G = Graph()
    visited = [1]
    while len(visited) != G.dimensions[0]:
        visited.clear()
        numberOfTops = random.randint(3, 7)
        numberOfLines = random.randint(1,
                                       numberOfTops * (numberOfTops - 1) / 2)
        G.importFromMatrix(GNL(numberOfTops, numberOfLines))
        G.DFS(G, 0, visited)
    return G
def Euler(numOfTops):
    if numOfTops < 5:
        print("nie można zbudować grafu o tej liczbie wierzcholkow")
        sys.exit(0)
    L = []
    visited = []
    iterate = 0
    G = Graph()
    while G.dimensions[0] == 0 or not any(
            G.matrix) or len(visited) != G.dimensions[0]:
        L.clear()
        visited.clear()
        while iterate != numOfTops:
            i = randint(1, 4)
            if not i % 2:
                L.append(i)
                iterate += 1
        G = graphicStringFromList(L)
        DFS(G, 0, visited)
        iterate = 0

    # visited.clear()
    # toFind = ecycle(G)
    # toFind.searchEulerPath()
    return G
def graphicStringFromList(ciag=None):
    #sprawdzanie ciągu graficznego i ewentuale tworzenie reprezentacji macierzowej tego grafu
    gList = []
    if ciag:
        gList = ciag[:]

    elif len(argv) == 1:
        print("Proszę podać ciąg:")
        gList = input(" ")
    else:
        gList = argv[1]
    try:
        bcgString = [int(i) for i in gList]
        gString = [int(i) for i in gList]
    except ValueError:
        print("Koniec programu")
        exit(0)

    if Interface(gString):

        graph = createGraph(bcgString)
        print("Otrzymano graf postaci:\n", graph.matrix)
        return graph
    else:
        return Graph((len(gList), len(gList)))
#!/usr/bin/env python3

from src.GraphClass import Graph
from src.draw import draw_graph


#Representation - Adjacency matrix

#task 1
print('==== task 1 ======')
G = Graph()
G.GNP(5,0.4)
print(G.matrix)
draw_graph(G, "zestaw4/randomGraph.png")

# task 2
print('\n==== task 2 ======')
print("Kosaraju tops list")
print(G.kosaraju())

# task 3
print('\n==== task 3 ======')
G2 = Graph()
print("Strongly cohesive graph")
G2.cohesiveGraph(5,0.1)
print(G2.matrix)
print(G2.randomWeightMatrix())
draw_graph(G2, "zestaw4/randomCohesiveGraph.png")
print("Bellman ford algorithm")
G2.bellman_ford(G2,0, True)
def createGraph(gList):
    '''tworzenie macierzy sąsiedztwa na podstawie ciągu graficznego'''
    print("Ciąg", gList, "jest ciągiem graficznym.")
    graph = Graph((len(gList), len(gList)))
    stone = len(gList)
    copy = gList[:]
    gList.sort()
    gList.reverse()
    index = 0
    loop = [0, 0]
    while len(gList) > 0:
        control = 0
        drawIndex = 1  #zmienna sprawdzająca
        j = 1  # checkingIndex -> index do faktycznego wypełniania macierzy
        key = gList[0]
        currentSize = len(gList)

        while drawIndex <= key and j < currentSize:
            #print(graph.matrix)
            if not gList[j]:  # jeżeli pozycja w ciągu jest równa zero
                j += 1
                continue

            if key != drawIndex and currentSize - 1 == j:
                gList[j] = gList[j] - 1
                graph.matrix[index][j + index] += 1
                graph.matrix[j +
                             index][index] += 1  #wypełnianie w przypadku pętli
                graph = changeIfPetla(1, graph, index, index + j)
                #print(graph.matrix[j+index][index])
                count = 0
                while graph.matrix[j + index][index] == 1:
                    if count == 1000:
                        return False
                    count += 1
                    graph = changeIfPetla(2, graph, index,
                                          index + j)  #randomizacja

                drawIndex += 1
            else:
                gList[j] = gList[j] - 1
                graph.matrix[index][
                    j + index] += 1  #zwykłe wpisywanie sąsiadów macierzy
                graph.matrix[j + index][index] += 1
                j += 1
                drawIndex += 1

        if len(gList) == 1:
            if graph.matrix[index][index - 1]:
                break
            graph.matrix[index][index] = gList[0]  #samotny wierzchołek

        gList.pop(0)
        index += 1
    control = 0
    index = len(graph.matrix[0])
    #while graph.matrix[index-1][index-2]>1:
    #   control+=1
    #  print(graph.matrix)
    # graph=changeIfPetla(1, graph, index-1, index-2) #część do randomizacji krawędzi wielokrotnych
    #print(graph.matrix)
    #if control>10: break
    while graph.matrix[index - 1][index - 1] > 1:
        #print(graph.matrix)
        graph = changeIfPetla(1, graph, index - 1, index - 1)

    return graph
Esempio n. 6
0
# Randomizuje grafy proste o zadanych stopniach wierzchołków. Operuje na 
# grafie stworzonym w poprzednim zadaniu.
 
print('\n\n\n Zadanie 2')
G2 = changeRandomEdge(G1, 1)
try:
    draw_graph(G2, 'zestaw2/po_zamianie.png')
except:    
    print("brak wizualizacji grafu") 


#zadanie 3
# Znajduje największą wspólną składową w grafie
# Wypisanie listy kolejno odwiedzonych wierzcholkow
print('\n\n\n Zadanie 3')
G3 = Graph()
G3.importFromFile("zestaw2/adj.txt")
print(searchComp(G3))
draw_graph(G3, 'zestaw2/najwieksza_składowa.png')

#zad 4
# Generuje graf Eulerowski i znajduje sciezke eulera
# Argumentami jest zakres, z jakiego ma byc wylosowana liczba wierzcholkow


G4 = GenerateEuler(5, 6)
try:
    draw_graph(G4, 'zestaw2/graf_Eulerowski.png')
except:    
    print("brak wizualizacji grafu") 
Esempio n. 7
0
from src.GraphClass import Graph
from src.draw import draw_graph

#task 1
print("task 1")
G = Graph(4)
# draw_graph(G, "Zestaw5/task1Graph.png")
print(G.matrixWeight)

#task 2
print("\ntask 2 - generated graph")
print(G.FordFulkerson(0, 5))