Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.88 KB | None | 0 0
  1. from graph.graph import Graph
  2. from algorithm import dijkstra
  3. from algorithm.connectedness import isConnected
  4. import numpy as np
  5. import networkx as nx
  6.  
  7.  
  8. def dfs(v, used, g, p=-1):
  9.     used[v] = True
  10.     for to in g.vertexes[str(v+1)]:
  11.         if not used[int(to) - 1]:
  12.             return dfs(int(to) - 1, used, g, v)
  13.         elif int(to) - 1 != p:
  14.             return True
  15.     return False
  16.  
  17.  
  18. def isCycled(graph):
  19.     used = [False]*graph.size()
  20.     for v in graph.vertexes:
  21.         if dfs(int(v) - 1, used, graph):
  22.             return True
  23.         used = [False] * graph.size()
  24.     return False
  25.  
  26.  
  27. def find_center(graph):
  28.     if isConnected(graph.to_matrix(), graph.oriented) == "Граф не связный":
  29.         return "Граф не связный", None
  30.     size = graph.size()
  31.     ecscentr = []
  32.     centres = []
  33.     for i in range(size):
  34.         dist = dijkstra(str(i + 1), graph.to_matrix())
  35.         ecscentr.append(max(dist))
  36.     r = min(ecscentr)
  37.     for i in range(len(ecscentr)):
  38.         if r == ecscentr[i]:
  39.             centres.append(str(i+1))
  40.  
  41.     return centres, r
  42.  
  43.  
  44. def to_prufer(graph):
  45.     if graph.oriented:
  46.         return False
  47.     leaves = []
  48.     size = graph.size()
  49.     killed = [False] * size
  50.     degrees = []
  51.     for i in range(size):
  52.         degrees.append(len(graph.vertexes[str(i+1)]))
  53.         if degrees[i] == 1:
  54.             leaves.append(i)
  55.     leaves.sort()
  56.     result = []
  57.     for i in range(size-2):
  58.         leaf = leaves[0]
  59.         leaves.pop(0)
  60.         killed[leaf] = True
  61.         for j in graph.vertexes[str(leaf+1)]:
  62.             if not killed[int(j) - 1]:
  63.                 v = int(j) - 1
  64.         result.append(v+1)
  65.         degrees[v] -= 1
  66.         if degrees[v] == 1:
  67.             leaves.append(v)
  68.             leaves.sort()
  69.     return result
  70.  
  71.  
  72.  
  73. def find_mincycle(graph):
  74.     # size = graph.size()
  75.     # mincycle = []
  76.     # mincycle.append(np.inf)
  77.     # matr = graph.to_matrix()
  78.     # dist = graph.to_matrix()
  79.     # for i in range(size):
  80.     #     for j in range(size):
  81.     #         if matr[i][j] == 0:
  82.     #             matr[i][j] = dist[i][j] = np.inf
  83.     # for k in range(size):
  84.     #     for i in range(k):
  85.     #         for j in range(i):
  86.     #             mincycle[0] = min(mincycle[0], dist[i][j] + matr[j][k] + matr[k][i])
  87.     #
  88.     #     for i in range(size):
  89.     #         for j in range(i):
  90.     #             temp = dist[i][k] + dist[k][j]
  91.     #             if temp < dist[i][j]:
  92.     #                 dist[i][j] = dist[j][i] = temp
  93.  
  94.     # if graph.oriented:
  95.     #     mincycle -= 1
  96.     g = nx.Graph()
  97.     nx.Graph()
  98.     size = graph.size()
  99.     matr = graph.to_matrix()
  100.     for i in range(1, size + 1):
  101.         g.add_node(i)
  102.         for j in range(1, size + 1):
  103.             if matr[i - 1][j - 1] is not 0:
  104.                 g.add_edge(i, j)
  105.     return nx.minimum_cycle_basis(g)[0]
  106.     # return mincycle
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement