Exemple #1
0
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;
}
Exemple #3
0
EditView::~EditView()
{
    Proj().RemoveListener( this );
    Ed().RemoveView( this );
    delete m_Canvas;
}
Exemple #4
0
// обращение методом Гаусса
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()