#include #include #include #define MAX_N 10000 unsigned long int lens[MAX_N][MAX_N]; unsigned long int vals[MAX_N][MAX_N]; int graph[MAX_N][MAX_N]; int en[MAX_N]; int beauty[MAX_N]; int n; int findMaxVertex(int start, int max) { int stack[MAX_N], s = 0; int visited[MAX_N] = {}; int maxV = -1, i; stack[s++] = start; visited[start] = 1; while (s > 0) { int v = stack[--s]; maxV = (maxV == -1 || beauty[v] > beauty[maxV])? v : maxV; for (i=0; i 0) { int v = stack[--s]; component[c++] = v; for (i=0; i= max && graph[v][j] == i) j++; if (beauty[i] < max && graph[v][j] == i) { neighbours[nn++] = i; j++; } } return nn; } void fillVals(int vertices[MAX_N], int start, int c, int max) { if (c == 1) { fprintf(stderr, "(%d)\n", vertices[0]); return; } int v = findMaxVertex(start, max); fprintf(stderr, "%d\n", v); int neighbours[MAX_N], nn; nn = getNeighbours(neighbours, v, max); int i, j; fprintf(stderr, "n %d: ", v); for (i=0; i