Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema pasando pseudocodigo a c++

Estas en el tema de Problema pasando pseudocodigo a c++ en el foro de C/C++ en Foros del Web. Buenos dias, Estoy haciendo un algorithmo simplex siguiendo el libro "introduction to algorithms" de cormen y ya lo he acabado. El problema es que no ...
  #1 (permalink)  
Antiguo 11/01/2016, 05:37
 
Fecha de Ingreso: agosto-2011
Mensajes: 13
Antigüedad: 13 años, 4 meses
Puntos: 0
Problema pasando pseudocodigo a c++

Buenos dias,

Estoy haciendo un algorithmo simplex siguiendo el libro "introduction to algorithms" de cormen y ya lo he acabado. El problema es que no me da el resultado correcto y creo que es por que he interpretado el pseudocodigo mal. Os pongo lo que he escrito junto con el pseudo a ver si le podeis echar un ojo, os lo agradeceria por que me estoy volviendo loco.

Gracias!!

Código:
void pivot(vector<vector<double>> &A, vector<double> &b, vector<double> &c, vector<double> &N, vector<double> &B, int l, int &v, int e)
{

	vector<vector<double>> Ainv(A.size(), vector<double>(A.size()));
	vector<double> binv(b.size()), cinv(c.size());

	binv[e] = b[l] / A[l][e];
	for (int j = 0; j<N.size(); j++)
	{
		if (j != e)
			Ainv[e][j] = A[l][j] / A[l][e];
	}
	Ainv[e][l] = 1 / A[l][e];

	for (int i = 0; i<B.size(); i++)
	{
		if (i != l)
		{
			binv[i] = b[i] - A[i][e] * binv[e];
			for (int j = 0; j<N.size(); j++)
			{
				if (j != e)
				{
					Ainv[i][j] = A[i][j] - A[i][e] * Ainv[e][j];
				}
			}
			Ainv[i][l] = -A[i][e] * Ainv[e][l];
		}

	}

	v = v + c[e] * binv[e];
	for (int j = 0; j<N.size(); j++)
	{
		if (j != e)
			cinv[j] = c[j] - c[e] * Ainv[e][j];

	}
	cinv[l] = -c[e] * Ainv[e][l];
	for (int j = 0; j<N.size(); j++)
	{
		N[j] = N[j];
		B[j] = B[j];
		if (j == e )N[j] = l;
		if (j == l )B[j] = e;
	}
	A = Ainv;
	b = binv;
	c = cinv;
}
pseudocodigo:


Código:
vector<double> simplex(vector<vector<double>> &A, vector<double> &b, vector<double> &c)
{


	int V, m, n, minval, l = 0;
	parser(A, b, c, m, n);
	vector<double> B(m), K(n), x(m + 1), N(n);
	if (!initialize_simplex(b, N, B, V))
	{
		cout << "Negative value on Vector b";
		x.clear();
		return x;
	}


	for (int i = 0; i<N.size(); i++)
	{
		if (c[i]>0)
		{
			for (int j = 0; j<B.size(); j++)
			{
				if (A[j][i]>0)
				{
					K[j] = b[j] / A[j][i];
				}
				else K[j] = LONG_MAX;
				if (K[j] != LONG_MAX)
				{
					
					l = j;
				}
				

			}
			if (K[l] == LONG_MAX)cout << "Error"<<endl;
			else
			{
				pivot(A, b, c, N, B, l, V, i);
			}
		}
	}

	for (int i = 1; i <= n; i++)
	{
		if (i <= B.size())x[i] = b[i];
		else x[i] = 0;
	}
	x[x.size() - 1] = V;
	return x;
}
pseudocodigo

Etiquetas: char, int, pasando, pseudocodigo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:21.