#include #include #include #include #include #include #include #define MAX_SIZE 100 int main ( int argc, char *argv[] ) { int n, c, i, visited[MAX_SIZE], u, v, status; char *cargv[MAX_SIZE], line[4 * MAX_SIZE], *nbrs; FILE *fp; printf("*** Process %d:", getpid()); for (i=1; i'); while (*nbrs == ' ') ++nbrs; while (*nbrs != '\n') { sscanf(nbrs, "%d", &v); if (c == n) { if (v == 1) { printf("\nHamiltonian cycle found:"); for (i=1; i<=n; ++i) printf(" %s", argv[i]); printf(" %d\n", v); exit(0); } } else { if (visited[v] == 0) { cargv[c+1] = (char *)malloc(10 * sizeof(char)); sprintf(cargv[c+1], "%d", v); cargv[c+2] = NULL; if (fork()) { wait(&status); if ( (WIFEXITED(status)) && (WEXITSTATUS(status) == 0) ) exit(0); } else { execvp("./a.out", cargv); } } } while ((*nbrs >= '0') && (*nbrs <= '9')) ++nbrs; while (*nbrs == ' ') ++nbrs; } } exit(1); }