#!/usr/bin/python3 from random import sample voisines1 = [[1, 2], [0, 2, 4], [0, 1, 3, 5], [2, 4], [1, 3, 5], [2, 4]] voisines2 = [[1, 2], [0, 2, 4], [0, 1, 5], [2, 4], [1, 5], [2, 4, 3]] voisines3 = [[1, 2], [0, 2, 4], [0, 1, 5], [2, 5], [1, 5], [2, 4, 3]] voisines4 = [[1, 2], [0, 2, 4], [0, 1, 5], [2, 4], [1, 5], [2, 4]] def bad_solution(neightbors, timer=50): ''' Global usage: We will try to generate a graph by traveling our tops and try to add it if: * the top is not adjacents to our tops found If our solution isn't found we will try again... ''' if timer < 10: timer = 10 # best_graph will contain our best graph found best_graph = list() for _ in range(timer): # adj will contain our adjacents to our points in grap adj = list() # graph will contain our current solution graph = list() # indexes will be our indexes list shuffled indexes = sample(range(0, len(neightbors)), len(neightbors)) for j in indexes: if j not in adj: graph.append(j) for neightbor in neightbors[j]: if neightbor not in adj: adj.append(neightbor) for k in range(0, len(neightbors)): if k not in graph and k not in adj: break found = True k = 0 # We will check if every top is in graph or adj, else it means we didn't find a solution while k < len(neightbors) and found: if k not in graph and k not in adj: found = False k += 1 if found and (len(best_graph) == 0 or len(graph) < len(best_graph)): best_graph = graph print(best_graph) bad_solution(voisines1) bad_solution(voisines2) bad_solution(voisines3) bad_solution(voisines4)