Example #1
0
File: symplex.cpp Project: qbolec/c
void got_vars(){
	prepareuklad();
	try{
		solveit(var_number);
		number cost=0;
		for(int i=0;i<var_number;i++)
			cost+=cena[which_var[i]]*solved[i];
		if(cost>answer){
			for(int d=0;d<m;d++){
				number happy=0;
				for(int i=0;i<var_number;i++)
					happy+=fun[d][which_var[i]]*solved[i];
				if(happy>total[d])
					return;
			}
			answer=cost;
		}
	}catch(int){}
}
Example #2
0
File: symplex.cpp Project: qbolec/c
void solveit(int size){
	if(size==1){
		if(!uklad[perm[0]][1])
			throw 0;
		solved[0]= uklad[perm[0]][0] / uklad[perm[0]][1];
		if(solved[0]<0)
			throw 0;
		return;
	}
	int bestr=0,r,i;
	number best=fabs(uklad[perm[0]][size]);
	for(r=1;r<size;r++)
		if(fabs(uklad[perm[r]][size])>best){
			best=fabs(uklad[perm[r]][size]);
			bestr=r;
		}
	if(!best)
		throw 0;
	swap( perm[size-1], perm[bestr] );
	number * main_row=uklad[perm[size-1]];
	best=main_row[size];
	for(r=0;r<size-1;r++){
		number * this_row=uklad[perm[r]];
		number * ptr=main_row;
		number factor=this_row[size]/best;
		if(factor){
			for(i=size;i;i--)
				(*this_row++)-=factor*(*ptr++);		
		}
	}
	solveit(size-1);
	number x=main_row[0];
	number * ptr=main_row+1;
	number * sol=solved;
	for(i=1;i<size;i++)
		x-= (*sol++)*(*ptr++);
	if((solved[size-1]=(x/best))<0)
		throw 0;
}
Example #3
0
int main(void){	
	while(scanf("%lu %lu",&a,&b)!=EOF) solveit();	
	return 0;
}