-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem.c
More file actions
73 lines (66 loc) · 1.82 KB
/
problem.c
File metadata and controls
73 lines (66 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* problem.c - Initialisierung und Verwaltung des Problems.
*
* (C) 2004 Ulrich Staerk
*
* Enthaelt alle notwendigen Funktionen, um ein
* Optimierungsproblem zu initialisieren und zu
* verwalten
*/
#include "solver.h"
/*
* Reserviert Speicher fuer ein neues Problem, initialisiert es
* und liefert einen Pointer auf dessen Speicherbeginn.
*/
problem *newproblem(int angebot, int nachfrage)
{
problem *p = (problem*) malloc (sizeof( struct problem_s) );
p->angebot = angebot;
p->nachfrage = nachfrage;
p->num_kanten = edges;
p->num_spalten = nachfrage;
p->num_zeilen = angebot;
p->angebote = (int*) malloc( sizeof(int) * angebot);
p->nachfragen = (int*) malloc( sizeof(int) * nachfrage);
p->zeilen = (int*) malloc( sizeof(int) * angebot);
p->spalten = (int*) malloc( sizeof(int) * nachfrage);
p->matrix = (int*) malloc( sizeof(int) * angebot * nachfrage );
p->vogel_spalten = (int*) malloc( sizeof(int) * nachfrage);
p->vogel_zeilen = (int*) malloc( sizeof(int) * angebot);
p->alpha = (int*) malloc(sizeof(int) * angebot);
p->beta = (int*) malloc(sizeof(int) * nachfrage);
/* Matrix, zeilen und spalten initialisieren */
int i,j;
for(i=0; i < angebot; i++) {
for(j=0; j < nachfrage; j++) {
p->matrix[i*nachfrage+j] = BIGINT;
}
}
for(i=0; i < angebot; i++)
p->zeilen[i] = 1;
for(i=0; i < nachfrage; i++)
p->spalten[i] = 1;
return p;
}
/*
* Streicht eine Zeile aus dem Problem (Kapazitaet des Angebotsknoten = 0).
*/
void streichezeile(int z, problem *p)
{
p->zeilen[z] = 0;
p->num_zeilen--;
p->vogel_zeilen[z] = -1;
if(DEBUG)
printf("Streiche Zeile %3d\n",z);
}
/*
* Streicht eine Spalte aus dem Problem (Kapazitaet des Nachfrageknoten = 0).
*/
void streichespalte(int s, problem *p)
{
p->spalten[s] = 0;
p->num_spalten--;
p->vogel_spalten[s] = -1;
if(DEBUG)
printf("Streiche Spalte %3d\n",s);
}