/* Initialisiert Datenstrukturen zur effektiven Speicherung von Graphen * initialisiert werden die Datenstrukturen fstt, fsth, nxth, und nxth * Gegeben sein müssen die Arrays tail und head, die den tail bzw. head * jeder Kante des Graphen enthalten, d.h. in tail ist gespeichert, wo die * Kante herkommt, und in head, wo sie hingeht. */ #define NOEDGE -1 /* definition for a non-edge */ #define m 4 /* maximal nr of edges */ #define n 5 /* maximal nr of nodes */ void init_adj_list (int *tail, int *head, int *fstt, int *nxtt, int *fsth, int *nxth) { int prein[n]; /* previous incoming edge */ int preou[n]; /* previous outgoing edge */ int e, f, v; for (v = 0; v < n; v++) { prein[v] = NOEDGE; preou[v] = NOEDGE; } for (e = 0; e < m; e++) { v = tail[e]; f = preou[v]; if ( f == NOEDGE ) fstt[v] = e; else nxtt[f] = e; preou[v] = e; v = head[e]; f = prein[v]; if( f == NOEDGE ) fsth[v] = e; else nxth[f] = e; prein[v] = e; } for (v = 0; v < n; v++) { e = preou[v]; if( e == NOEDGE ) fstt[v] = NOEDGE; else nxtt[e] = NOEDGE; e = prein[v]; if( e == NOEDGE ) fsth[v] = NOEDGE; else nxth[e] = NOEDGE; } return; }