Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int main() {
- double next[20][20];
- double a[20][20];
- double b[20][20];
- double bo[20][20];
- double del[20][20];
- double dl[20][20];
- double op[20][20];
- cout << "next" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cin >> next[i][j];
- }
- }
- cout << "a" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cin >> a[i][j];
- }
- }
- cout << "b" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cin >> b[i][j];
- }
- }
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- del[i][j] = 0;
- dl[i][j] = 0;
- op[i][j] = 0;
- }
- }
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- bo[i][j] = b[i][j];
- }
- }
- double dc = 10000;
- double Oprev = INFINITY;
- double m0 = INFINITY;
- int cycles = 0;
- do {
- Oprev = m0;
- cycles++;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- if (bo[i][j] != 0) {
- double L = 200 * 8;
- for (int x = 0; x < 20; x++) {
- for (int y = 0; y < 20; y++) {
- double bm = bo[x][y];
- double am = a[x][y];
- if ((i == x) && (j == y)) {
- bm += dc;
- }
- del[x][y] = L / (bm - am);
- }
- }
- }
- for (int x = 1; x < 21; x++) {
- for (int y = 1; y < 21; y++) {
- double sum = 0;
- if (x == y) {
- sum = del[x - 1][y - 1];
- }
- else {
- int k = x;
- int nextK = y;
- while (k != y) {
- nextK = next[k - 1][y - 1];
- sum += del[k - 1][nextK - 1];
- k = nextK;
- }
- }
- dl[x - 1][y - 1] = sum;
- }
- }
- double Topt = 0.05;
- double sumO = 0;
- for (int x = 0; x < 20; x++) {
- for (int y = 0; y < 20; y++) {
- sumO += (dl[x][y] - Topt) * (dl[x][y] - Topt);
- }
- }
- op[i][j] = sumO;
- }
- }
- int mi = 0;
- int mj = 0;
- m0 = op[mi][mj];
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- if (op[i][j] != 0) {
- double tmp = op[i][j];
- if (tmp < m0) {
- m0 = tmp;
- mi = i;
- mj = j;
- }
- }
- }
- }
- double b = bo[mi][mj];
- bo[mi][mj] = b + dc;
- cout << "cycles =" << cycles << endl;
- } while (m0 < Oprev);
- cout << "B0" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cout << bo[i][j] << " ";
- }
- cout << endl;
- }
- cout << "DEL" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cout << del[i][j] << " ";
- }
- cout << endl;
- }
- cout << "DL" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cout << dl[i][j] << " ";
- }
- cout << endl;
- }
- cout << "O" << endl;
- for (int i = 0; i < 20; i++) {
- for (int j = 0; j < 20; j++) {
- cout << op[i][j] << " ";
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment