-
Notifications
You must be signed in to change notification settings - Fork 0
/
ListaMatriz.py
134 lines (107 loc) · 4.1 KB
/
ListaMatriz.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
from Nodo import *
import os
class ListaMatriz:
def __init__(self):
self.first = None
def insert(self, nombre, n, m):
nuevo = Nodo(nombre, n, m)
if self.first is None:
self.first = nuevo
return nuevo
else:
temp = self.first
while temp.next is not None:
temp = temp.next
temp.next = nuevo
nuevo.before = temp
return nuevo
return None
def mostrar(self):
tmp = self.first
contador = 1
while tmp is not None:
print(str(contador) + '. nombre: ' + str(tmp.nombre) + ', n = ' + str(tmp.n) + ' m = ' + str(tmp.m))
print(tmp.matriz.mostrar())
contador += 1
tmp = tmp.next
def getSize(self):
tmp = self.first
cont = 0
while tmp is not None:
cont += 1
tmp = tmp.next
return cont
def reducir(self):
tmp = self.first
filaVeri = ""
nextFila = ""
while tmp is not None:
matriz = tmp.matriz.star
while matriz is not None:
if filaVeri.find(matriz.x) == -1: #Se verifica que la fila no se haya analizado
nextFila = tmp.matriz.getNodo(matriz, tmp.m, tmp.matriz.star)
if nextFila != "":
if filaVeri != "":
filaVeri += ';' + nextFila
else:
filaVeri = nextFila
matriz = matriz.next
print("Nombre matriz : " + tmp.nombre + " -- Reducciones: " + filaVeri)
filaVeri = ""
tmp = tmp.next
def suma(self, matriz, listafila):
tmp = self.first
matriz = tmp.matriz.star
#while matriz is not None:
def graph(self, matrix, busqueda):
encontrado = True
tmp = matrix.first
dot = "digraph G { \n"
while tmp is not None and encontrado:
if str.lower(tmp.nombre) == str.lower(busqueda):
lista = tmp.matriz.star
while lista is not None:
if lista.x == "1":
if lista.y == "1":
dot += "Inicio[label=\"Matrices\"]\n"
dot += "Matriz[label=\"" + tmp.nombre + "\"]\n"
dot += "filas[label=\" n = " + tmp.n + "\", shape = doublecircle, color = blue]\n"
dot += "columnas[label=\" m = " + tmp.m + "\", shape = doublecircle, color = blue]\n"
dot += "Inicio -> Matriz \n"
dot += "Matriz -> filas\n"
dot += "Matriz -> columnas\n"
nodo = "fila1" + lista.y
dot += nodo + "[label=\"" + lista.value + "\"]\n"
dot += "Matriz" + " -> " + nodo + "\n"
else:
nodoAnterior = "fila" + str(int(lista.x)-1) + lista.y
nodo = "fila" + lista.x + lista.y
dot += nodo + "[label=\"" + lista.value + "\"]\n"
dot += nodoAnterior + " -> " + nodo + "\n"
lista = lista.next
encontrado = False
tmp = tmp.next
try:
dot += "}"
archivo = open("grafico.dot", 'w')
archivo.write(dot)
archivo.close()
os.system("dot -Tpng grafico.dot -o grafico.png")
os.startfile("grafico.png")
except Exception:
if not encontrado:
return False
def getNodo(self, valor):
tmp = self.first
while tmp is not None:
if str.lower(tmp.nombre) == str.lower(valor):
return tmp
tmp = tmp.next
return None
def mostrarnom(self):
tmp = self.first
contador = 1
while tmp is not None:
print(str(contador) + '. nombre: ' + str(tmp.nombre))
contador += 1
tmp = tmp.next