-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
78 lines (65 loc) · 3.11 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import networkx as nx
import pygraphviz as pgv
from networkx.drawing.nx_agraph import graphviz_layout
import matplotlib.pyplot as plt
# Course data with prerequisites
courses = {
"Circuitos Digitais": [],
"Matemática Discreta": [],
"Linguagens de Programação": [],
"Introdução à Ciência da Computação com Python I": [],
"Geometria Analítica": [],
"Cálculo I": ["Geometria Analítica"],
"Álgebra Linear I": ["Geometria Analítica"],
"Estruturas de Dados": ["Matemática Discreta", "Introdução à Ciência da Computação com Python I"],
"Introdução à Ciência da Computação com Python II": ["Introdução à Ciência da Computação com Python I"],
"Laboratório de Programação Orientada a Objetos I": ["Introdução à Ciência da Computação com Python I"],
"Algoritmos em Grafos": ["Estruturas de Dados"],
"Arquitetura de Computadores I": ["Circuitos Digitais"],
"Probabilidade e Estatística": ["Cálculo I"],
"Cálculo II": ["Cálculo I"],
"Programação Funcional em Haskell": [],
"Análise de Algoritmos": ["Algoritmos em Grafos"],
"Métodos Numéricos I": ["Introdução à Ciência da Computação com Python I", "Cálculo I"],
"Banco de Dados": [],
"Arquitetura de Computadores II": ["Introdução à Ciência da Computação com Python II", "Arquitetura de Computadores I"],
"Programação Lógica": [],
"Redes de Computadores": [],
"Introdução à Engenharia de Software": ["Introdução à Ciência da Computação com Python II"],
"Sistemas Operacionais": ["Arquitetura de Computadores II"],
"Programação Matemática": ["Álgebra Linear I"],
"Fundamentos de Computação Gráfica": ["Geometria Analítica"],
"Linguagens Formais e Autômatos": ["Matemática Discreta"],
"Inteligência Artificial": ["Estruturas de Dados", "Probabilidade e Estatística"],
"Sistemas Distribuídos": ["Redes de Computadores"],
"Teoria dos Grafos": ["Matemática Discreta"],
"Cálculo III": ["Cálculo II"],
"Teoria da Computação": ["Linguagens Formais e Autômatos"],
"Deep Learning": ["Inteligência Artificial"],
"Compiladores": ["Estruturas de Dados", "Teoria dos Grafos"],
"Computação Quantica": ["Cálculo III", "Arquitetura de Computadores II"],
"Metodologia da Pesquisa": []
}
# Create a directed graph object
grafo = nx.DiGraph(overlap=False, splines='true')
# Add nodes (courses)
grafo.add_nodes_from(courses.keys())
# Add edges (dependencies)
for course, prerequisites in courses.items():
if prerequisites:
for prerequisite in prerequisites:
grafo.add_edge(prerequisite, course)
# ---
# Create a PyGraphviz graph from the NetworkX graph
A = nx.nx_agraph.to_agraph(grafo)
# Modify the graph's rank separation
A.graph_attr.update(ranksep="2")
# Write the graph to a .dot file
A.write('grafo_dependencias.dot')
# ---
# Create layout for our nodes
layout = graphviz_layout(grafo, prog='dot', args='-Granksep=42')
# Draw the graph using the layout
nx.draw(grafo, pos=layout, with_labels=True, arrows=True)
# Save it to a file
plt.savefig('grafo_dependencias.png', format='PNG')