Untitled
unknown
plain_text
2 years ago
1.6 kB
7
Indexable
node_t* extend(node_t* p, int m, int n, double** a, double* b, double* c, int k, double ak, double bk) { node_t* q = calloc(1, sizeof(node_t)); q->k = k; q->ak = ak; q->bk = bk; q->next = NULL; if (ak > 0 && p->max[k] < HUGE_VAL) { q->m = p->m; } else if (ak < 0 && p->min[k] > 0) { q->m = p->m; } else { q->m = p->m + 1; } q->n = p->n; q->h = -1; q->a = make_matrix(q->m+1, q->n+1); q->b = calloc(q->m+1, sizeof(double)); q->c = calloc(q->n+1, sizeof(double)); q->x = calloc(q->n+1, sizeof(double)); q->min = calloc(n, sizeof(double)); q->max = calloc(n, sizeof(double)); int i, j; for(i = 0; i < n; i++) { q->min[i] = p->min[i]; q->max[i] = p->max[i]; } for(i = 0; i < m; i++) { for(j = 0; j < n + 1; j++) { q->a[i][j] = a[i][j]; } q->b[i] = b[i]; } //Eller n + 1? Hur lång är c? for(i = 0; i < n+1; i++) { q->c[i] = c[i]; } if(ak > 0) { if(q->max[k] == INFINITY || bk < q->max[k]) { q->max[k] = bk; } } else if (q->min[k] == -INFINITY ||bk > q->min[k]) { q->min[k] = -bk; } for(i = m, j = 0; j < n; j++) { if(q->min[j] > -INFINITY) { q->a[i][j] = -1; q->b[i] = -q->min[j]; i++; } if(q->max[j] < INFINITY) { q->a[i][j] = 1; q->b[i] = q->max[j]; i++; } } return q; }
Editor is loading...