#include #include #include #include #include #include #include #include #include #define N 1000 #define C 4 #define SHMSZ ((N+2)*N+2*C+5) * sizeof(int) #define VSEMSZ (C*C) #define EDGEPROB 0.005 typedef int (*matrix)[N]; #define P(s,i) { \ struct sembuf pop; \ pop.sem_num = i; \ pop.sem_op = -1; \ pop.sem_flg = 0; \ semop(s, &pop, 1); \ } #define V(s,i) { \ struct sembuf vop; \ vop.sem_num = i; \ vop.sem_op = 1; \ vop.sem_flg = 0; \ semop(s, &vop, 1); \ } void setup ( int shmid ) { matrix G; int i, j; int *M; M = (int *)shmat(shmid, 0, 0); /* Number of nodes */ M[0] = N; ++M; /* Adjacency matrix */ G = (matrix)M; for (i=0; i", i); for (j=0; j B) { printf("\n+++ All reachable nodes are visited. Current Q position is [%4d,%4d].\n\n", F, B); for (i=0; i B) end = B; M[N*N+3+2*i] = start; M[N*N+3+2*i+1] = end; start = end + 1; } M[N*N+2*C+3] = B + 1; for (i=0; i