-
Notifications
You must be signed in to change notification settings - Fork 0
/
nodo.cpp
166 lines (134 loc) · 3.69 KB
/
nodo.cpp
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include "nodo.h"
using namespace std;
/*Nodo::Nodo(vector< vector <int> > p){
perfil = p;
}*/
void Nodo::insertar(vector<int> c) {
perfil.push_back(c);
}
void Nodo::mostrar(){
MatPref perfil_aux = perfil;
int tam = perfil.size();
for (unsigned i = 0; i < tam ; i++) {
vector<int> z = perfil_aux.back();
perfil_aux.pop_back();
for ( unsigned j = 0; j < z.size(); j++ )
cout << " " << z[j];
cout << endl;
}
cout<< endl;
}
/* Funcion para verificar que dos nodos sean iguales,
retorna 1 sino lo son, 0 en caso contrario */
/*int repetidos(Nodo x, Nodo y){
int checkSum1, checkSum2, checkTot1 = 0, checkTot2 = 0;
int tam = y.perfil.size();
// Si la matriz no es del mismo tamano ya descarto que sean iguales
if (x.perfil.size() != y.perfil.size()){
return 0;
}
else{
for (unsigned i = 0; i< tam ; i++) {
vector<int> z = x.perfil.back();
vector<int> w = y.perfil.back();
x.perfil.pop_back();
y.perfil.pop_back();
// Verifico que cada columna tenga el mismo tamano
if (z.size() != w.size())
return 0;
else{
checkSum1 = 0;
checkSum2 = 0;
for ( unsigned j = 0; j < z.size(); j++ ){
checkSum1 += pow(z[j],j);
checkSum2 += pow(w[j],j);
}
checkTot1 = checkTot1 + checkSum1;
checkTot2 = checkTot2 + checkSum2;
}
}
// Verifico que los elementos sean iguales
if (checkTot1 != checkTot2)
return 0;
return 1;
}
}*/
/*int repetidos(Nodo x, Nodo y){
MatPref n1 = x.perfil;
MatPref n2 = y.perfil;
int j;
// Veo si el tamano de ambos nodos es igual
if (n1.size() != n2.size())
return 0;
else{
// Fijo la ultima columna del nodo 1.
for (unsigned i = x.perfil.size() - 1; i >= 1; i--){
vector<int> pref_n1 = n1.at(i);
j = 0;
// Itero sobre las columnas del nodo 2 en busca de una columna igual.
while (j < n2.size()){
vector<int> pref_n2 = n2.at(j);
// Verifico que la matriz este compuesta de las mismas columnas.
if (pref_n1[0] != pref_n2[0])
j++;
else{
//Itero sobre los elementos de las columnas
for (unsigned k = 1; k < pref_n2.size(); k++ ){
//Si hay algun elemento diferente concluyo que son diferentes
if (pref_n1[k] != pref_n2[k]){
return 0;
}
}
// Voy eliminando columnas hasta quedar con una sola (caso base)
if (n1.size() >=1 and n2.size() >= 1){
n1.erase(n1.begin() + i);
n2.erase(n2.begin() + j);
j = y.perfil.size();
}
}
}
/* Corroboro que luego de iterar sobre el nodo 2 se haya eliminado una columna
lo que indica que hubo al menos una coincidencia */
/* if (n1.size() == x.perfil.size())
return 0;
}
/* Caso base, me quedan dos columnas las cuales voy a comparar*/
/*if (n1.size() == 1 and n2.size() == 1){
vector <int> pref_n1 = n1.at(0);
vector <int> pref_n2 = n2.at(0);
if (pref_n1[0] == pref_n2[0]){
for (unsigned k = 1; k < pref_n2.size(); k++ ){
if (pref_n1[k] != pref_n2[k])
return 0;
}
return 1;
}
else
return 0;
}
}
}*/
/*
int main () {
Nodo nodo;
Nodo nodo1;
vector <int> d, e, f,g,i;
d.push_back(1); d.push_back(0); d.push_back(8);
e.push_back(0); e.push_back(1); e.push_back(8);
g.push_back(4); g.push_back(2); g.push_back(1);
f.push_back(5); f.push_back(1); f.push_back(2);
i.push_back(1); i.push_back(2); i.push_back(4);
nodo.insertar(e);
nodo.insertar(d);
//nodo.insertar(f);
nodo.insertar(g);
//nodo1.insertar(f);
nodo1.insertar(i);
nodo1.insertar(d);
nodo1.insertar(e);
nodo.mostrar();
nodo1.mostrar();
cout << "Son iguales: " << repetidos(nodo,nodo1) << endl;
return 0;
}
*/