-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraphreader.c
More file actions
113 lines (108 loc) · 2.11 KB
/
graphreader.c
File metadata and controls
113 lines (108 loc) · 2.11 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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
* graphreader.c - Einlesen des Graphen
*
* (C) 2004 Ulrich Staerk
*
* Enthaelt Funktionen zum Einlesen eines von Netgen
* generierten Graphen und dessen Speicherung in den
* dafuer vorgesehenen Datenstrukturen.
*/
#include "solver.h"
/*
* Einlesen der Graph-Parameter Anzahl Knoten, Anzahl Kanten
* und Kapazitaeten der Knoten.
*/
problem *readparameters(int *nodes, int *edges)
{
FILE *fp;
if(!(fp = fopen("instance","r")))
return NULL;
int angebot=0,nachfrage=0;
char zeile[100];
/* Parameter einlesen */
while( fgets(zeile, 100, fp) != NULL ) {
if(zeile[0] == 'p') {
char *pzeile = strtok(zeile," ");
int i=0;
while(pzeile != NULL) {
if(i==2)
*nodes = atoi(pzeile);
if(i==3)
*edges = atoi(pzeile);
pzeile = strtok(NULL, " ");
i++;
}
break;
}
}
/* Knoten einlesen */
int nodearray[*nodes];
while( fgets(zeile, 100, fp) != NULL ) {
if(zeile[0] == 'n') {
int n = 0,v = 0;
char *pzeile = strtok(zeile," ");
int i=0;
while(pzeile != NULL) {
if(i==1)
n = atoi(pzeile);
if(i==2)
v = atoi(pzeile);
pzeile = strtok(NULL, " ");
i++;
}
nodearray[n-1] = v;
}
}
int i=0;
while(i < *nodes) {
if(nodearray[i] > 0)
(angebot)++;
else
(nachfrage)++;
i++;
}
fclose(fp);
/* Kapazitaeten der Knoten im Problem speichern */
problem *p = newproblem(angebot,nachfrage);
i=0;
while(i < *nodes) {
if(nodearray[i] > 0)
p->angebote[i] = nodearray[i];
else
p->nachfragen[i-angebot] = -nodearray[i];
i++;
}
return p;
}
/*
* Einlesen der Kosten auf den Kanten.
*/
void readgraph(problem *p)
{
FILE *fp;
if(!(fp = fopen("instance","r")))
exit(1);
char zeile[100];
/* Kanten und Kosten einlesen */
while( fgets(zeile, 100, fp) != NULL ) {
if(zeile[0] == 'a') {
int a=0,n=0,c=0,i=0;
char *pzeile = strtok(zeile," ");
while(pzeile != NULL) {
if(i==1)
a = atoi(pzeile);
if(i==2)
n = atoi(pzeile);
if(i==5)
c = atoi(pzeile);
pzeile = strtok(NULL, " ");
i++;
}
n = n - p->angebot - 1;
a = a - 1;
p->matrix[a*p->nachfrage+n] = c;
}
}
fclose(fp);
vogel(p);
}