From 9983d25742570571a97e841b6b2a749d48242d3e Mon Sep 17 00:00:00 2001 From: zenon Date: Wed, 6 Jun 2018 17:25:30 +0200 Subject: [PATCH] Calculate index and add to feedback arc set --- generator.c | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/generator.c b/generator.c index afbcac7..bb4670a 100644 --- a/generator.c +++ b/generator.c @@ -200,30 +200,48 @@ int findIndex(int array[], int value, int size) return (index == size ? -1 : index); } -void genSolution(int permutation[]) +void genSolution(int permutation[], int V) { int r; // initialize array to indices - for (int i = 0; i < graph.V; i++) { + for (int i = 0; i < V; i++) { permutation[i] = i; } - + // loop from end to start, choose random and switch // with number at current index. - for (int i = (graph.V - 1); i > 0; i--) { + for (int i = (V - 1); i > 0; i--) { r = rand() % (i+1); int tmp = permutation[r]; permutation[r] = permutation[i]; permutation[i] = tmp; } - for (int u = 0; u < graph.V; u++) { + int edges[MAX_ITEMS] = {-1}; + int count = 0; + + for (int u = 0; u < V; u++) { + int idx = findIndex(permutation, u, V); struct AdjListNode *pCrawl = graph.array[u].head; while (pCrawl) { - + int idx_v = findIndex(permutation, pCrawl->dest, V); + if (idx > idx_v) { + edges[count++] = u; + edges[count++] = pCrawl->dest; + if (count > MAX_ITEMS) + return; + break; + } + pCrawl = pCrawl->next; } } + + printf("["); + for (int i = 0; i < (count - 1); i++) { + printf("%d, ", edges[i]); + } + printf("%d]\n", edges[count-1]); } int main(int argc, char *argv[]) @@ -231,7 +249,7 @@ int main(int argc, char *argv[]) if (argc == 1) usage(); pname = argv[0]; - + struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = &sig_handler; @@ -261,19 +279,15 @@ int main(int argc, char *argv[]) */ parse(argc, argv); - - srand(time(NULL)); + + // seed differently for each process + srand(time(NULL) * getpid()); int permutation[graph.V]; while (quit == 0) { - for (int i = 0; i < 10; i++) { - genSolution(permutation); - printf("["); - for (int i = 0; i < (graph.V - 1); i++) { - printf("%d, ", permutation[i]); - } - printf("%d]\n", permutation[graph.V-1]); + for (int i = 0; i < 1000000; i++) { + genSolution(permutation, graph.V); } break; }