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
# 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")
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))