void disassembler::Ey(const x86_insn *insn) { if (insn->os_64) Eq(insn); else Ed(insn); }
int main(void){ //PRUEBA CLASE EDGE: /* Edge arista(1,2,0.65); cout << arista.Weight() <<" "<< arista.either() <<" "<< arista.other(1) << endl; arista.toString(); MiBag bolsa; bolsa.add(arista); bolsa.iterate_Edge();*/ /* //PRUEBA CLASE WEIGHTEDGRAPH EdgeWeightedGraph mi_grafo(5); Edge arista(1,2,0.65); Edge arista1(1,3,0.64); Edge arista2(4,2,0.70); Edge arista3(1,4,0.32); Edge arista4(3,0,0.3); Edge arista5(0,2,0.1); mi_grafo.addEdge(arista); mi_grafo.addEdge(arista1); mi_grafo.addEdge(arista2); mi_grafo.addEdge(arista3); mi_grafo.addEdge(arista4); mi_grafo.addEdge(arista5); */ // INICIO DE PRUEBA LAZY PRIM MST int V,E; ifstream fin("tinyEW.txt"); //ifstream fin("1000EWG.txt"); //ifstream fin("mediumEWG.txt"); char vertex[255]; char edges[255]; fin.getline(vertex,255);//lee la primera linea fin.getline(edges,255);//lee la segunda linea string Ve(vertex); string Ed(edges); istringstream bv(Ve); istringstream be(Ed); bv>>V; be>>E; char line[255]; //MinIndexedPQ pq(E);//prueba EdgeWeightedGraph mi_grafo(V); int u,v; float w; for (int i = 0; i<E; i++){ fin.getline(line,255); string s(line); vector <string> fields; boost::algorithm::split(fields, s, boost::algorithm::is_any_of(" ")); istringstream bu(fields[0]); bu>>u; //cout<<u<<" "; istringstream bv(fields[1]); bv>>v; //cout<<v<<" "; istringstream bw(fields[2]); bw>>w; //cout<<w<<" "; //cout<<" "<<endl; Edge e(u,v,w); /*float u = e.weight(); */mi_grafo.addEdge(e); } //PRUEBA DE PRIORITY QUEUE QUE ALMACENA TODOS LOS EDGES: /*priority_queue<Edge, vector<Edge>, CompareEdges> pq = mi_grafo.priorityQueue(); while(!pq.empty()){ Edge e = pq.top(); e.toString(); pq.pop(); }*/ //PRUEBAS DE ALGORITMOS: cout<<"El MST Eager Prim:"<<endl; EagerPrimMST mst1(mi_grafo); mst1.printMST(); cout<<"El MST Lazy Prim:"<<endl; LazyPrimMST mst2(mi_grafo); mst2.printMST(); cout<<"El MST Kruskal:"<<endl; kruskalMST mst3(mi_grafo); mst3.printMST(); //cout<<"El peso total del MST es: "<<mst.weight()<<endl; return 0; }
EditView::~EditView() { Proj().RemoveListener( this ); Ed().RemoveView( this ); delete m_Canvas; }
// обращение методом Гаусса CMatrix CMatrix::inverse() const{ /* закомментированы вспомогательные проверки промежуточных шагов */ UINT n = getRowCount(); // размерность квадратной матрицы CMatrix Ed(n, n), Res(*this); // заполняем единичную матрицу for (UINT i = 0; i < n; i++) { Ed[i][i] = 1; } /* прямой ход */ for (UINT i = 0; i < n; i++) { // равен ли диагональный элемент 1 if (Res[i][i] != 1) { TYPE divider; // делитель, равный не-единичному диаг. элементу // проверили текущий диагональный элемент на 0 if (Res[i][i] == 0) { UINT k = i + 1; while ((Res[k][i] == 0) && (k < n)) k++; /* на выходе из цикла в теории может оказаться так, что весь столбец нулевой. такое возможно, и, в принципе, надо сделать проброс исключения на этот счёт. но это лишь означает, что det = 0. Мы собираемся это проверять снаружи, что исключает такую возможность. но она есть, это факт. */ if (Res[k][i] != 0) { divider = Res[k][i]; // приводим диагоальный элемент к 1 (делим строку на него) for (UINT p = 0; p < n; p++) { Res[i][p] += Res[k][p] / divider; Ed[i][p] += Ed[k][p] / divider; /*cout << "\n - Res"; Show(Res); cout << "\n - Ed"; Show(Ed); cout << "End step (p = " << p << ")\n";*/ } } } else // диагональный элемент (!= 0 && != 1) { divider = Res[i][i]; // приводим диагоальный элемент к 1 (делим строку на него) for (UINT p = 0; p < n; p++) { Ed[i][p] /= divider; Res[i][p] /= divider; /*cout << "\n - Ed"; Show(Ed); cout << "\n - Res"; Show(Res); cout << "End step (p = " << p << ")\n";*/ } } } // приравняли диагональный элемент к 1 // приводим матрицу к треугольному виду for (UINT j = i + 1; j < n; j++) // вертикальный индекс { if (TYPE left_side = Res[j][i]) // если сбоку не 0 { for (UINT p = 0; p < n; p++) // горизонтальный индекс { /*cout << "\nNew step (j = " << j << ", " << "p = " << p << ")\n"; cout << "Sboku " << left_side << " Sverhu " << Res[i][p];*/ if (Ed[i][p]) // если сверху не 0 { Ed[j][p] -= Ed[i][p] * left_side; //cout << "\n - Ed"; Show(Ed); } if (Res[i][p]) // если сверху не 0 { Res[j][p] -= Res[i][p] * left_side; //cout << "\n - Res"; Show(Res); } } } } } // конец прямого хода /* обратный ход */ for (int i = n - 1; i > 0; i--) // диагональный индекс { for (int j = i - 1; j >= 0; j--) // вертикальный индекс { if (TYPE right_side = Res[j][i]) // если сбоку не 0 { for (int k = n - 1; k >= 0; k--) // горизонтальный индекс { /*cout << "\nNew step (j = " << j << ", " << "k = " << k << ")\n"; cout << "Sboku " << right_side << " Snizu " << Res[i][k];*/ if (Ed[i][k]) // если снизу не 0 { Ed[j][k] -= Ed[i][k] * right_side; //cout << "\n - Ed"; Show(Ed); } if (Res[i][k]) // если снизу не 0 { Res[j][k] -= Res[i][k] * right_side; //cout << "\n - Res"; Show(Res); } } } } } // конец return Ed; } // конец CMatrix CMatrix::inverse()