Funció: Crear un graf que representi les relacions entre els nois. Descripció: Els nodes del graf representaran els nois. Les arestes representaran les restriccions: per exemple, si un noi no pot estar darrere del seu enemic sense que abans hi hagi el seu amic, això es traduirà en una restricció d'ordre entre els nodes.
Per crear un graf que representi les relacions entre els nois, podem utilitzar la biblioteca `networkx` per crear el graf i `matplotlib` per visualitzar-lo. A continuació, hi ha un exemple de com fer-ho: ```python import networkx as nx import matplotlib.pyplot as plt # Crear un graf nou G = nx.DiGraph() # Afegir nodes (nois) G.add_node("Joan") G.add_node("Pere") G.add_node("Lluís") G.add_node("Marc") # Afegir arestes (restriccions) # Joan no pot estar darrere de Pere sense que abans hi hagi Lluís G.add_edge("Lluís", "Pere") G.add_edge("Lluís", "Joan") # Pere no pot estar darrere de Marc sense que abans hi hagi Joan G.add_edge("Joan", "Marc") G.add_edge("Joan", "Pere") # Marc no pot estar darrere de Lluís sense que abans hi hagi Pere G.add_edge("Pere", "Lluís") G.add_edge("Pere", "Marc") # Visualitzar el graf pos = nx.spring_layout(G) nx.draw_networkx_nodes(G, pos, node_size=500, node_color='lightblue') nx.draw_networkx_labels(G, pos, font_size=10) nx.draw_networkx_edges(G, pos, edge_color='gray', arrowsize=20) plt.show() ``` En aquest exemple, els nodes representen els nois i les arestes representen les restriccions. Les arestes són direccions, per exemple, si hi ha una aresta de "Lluís" a "Pere", significa que Lluís ha de venir abans que Pere. Per visualitzar el graf, es crea un layout amb `spring_layout` i es dibuixen els nodes i les arestes amb `draw_networkx_nodes`, `draw_networkx_labels` i `draw_networkx_edges`. Finalment, es mostra el graf amb `plt.show()`.