This version is unverified.
Input: simplex table
int simplex(int** a, int rows, int cols) {
while (true) {
int i = -1;
for (int j = 0; j < cols; ++j) {
if (a[rows-1][j] < 0) {
i = j;
break;
}
}
if (i == -1) {
return 0;
}
int j = -1;
double lambda = 0;
for (int k = 0; k < rows - 1; ++k) {
int newlambda = a[k][cols-1] / a[k][i];
if (a[k][i] > 0 && (j == -1 || lambda > newlambda)) {
lambda = newlambda;
j = k;
}
}
if (j == -1) {
return 1;
}
for (int k = 0; k < rows; ++k) {
double multiplier = (k == j ? 1 : a[k][i]) / a[j][i];
for (int l = 0; l < cols; ++l) {
a[k][l] -= a[j][l] * multiplier;
}
}
}
}