import java.util.*;
public class game{
int n;
int m;
double[][] a;
public void simplex(){
int p,q;
double d,k,pivo;
double min;
while (true) {
p=0; q=0;
d=0; k=0; pivo=0;
min = 10000;
for(int i=0; i<n; i++) {
if ( a[m][i] < min ) {
min = a[m][i];
q = i;
}
}
if ( min == 0 ) break; // 最小値>=0 なら終了
min = 10000;
for(int i=0; i<m; i++) {
k = a[i][n+m]/a[i][q];
if ( a[i][q] > 0 && k < min ) {
min = k;
p = i;
}
}
pivo = a[p][q]; // ピボット要素
//ピボット行の要素をピボット要素で割る
for(int i=0; i<=n+m; i++) {
a[p][i] = a[p][i]/pivo;
}
// 掃き出し
for(int i=0; i<=m; i++) {
if ( i != p ) {
d = a[i][q];
for(int j=0; j<n+m+1; j++) {
a[i][j] = a[i][j] - a[p][j]*d;
}
}
}
}
}
public void prnAns() {
System.out.println("[ 答え ] ");
for(int i=0; i<n; i++){
int mark = -1;
for(int j=0; j<m; j++){
if ( a[j][i] == 1 ) mark = j;
}
if ( mark != -1 ) {
System.out.println(" x" + (i+1) + "=" + a[mark][n+m]);
}
}
System.out.println(" f(x)の最大値 = " + a[m][n+m]);
}
}
最終更新:2011年08月22日 07:04