/* Constructive program to validate graphic and multi-graphic sequences */ #include #include #include #define N_DFT 10 #define N_MAX 100 #define INFINITY 999999999 typedef struct { int id; int deg; } pair; void genseq ( pair A[], int n, int B ) { int i, sum; printf("\nSequence:"); for (i=sum=0; i *k)) *k = A[i].deg; ++i; } j = i; while (i < n) { if (A[i].deg) { if ((k) && (A[i].deg > *k)) *k = A[i].deg; A[j] = A[i]; ++j; } ++i; } return j; } void csort ( pair A[], int n, int k ) { int i, d; pair B[N_MAX]; int C[N_MAX]; for (d=0; d<=k; ++d) C[d] = 0; for (i=0; i=1; --i) C[i] = C[i-1]; for (i=1; i<=k; ++i) C[i] += C[i-1]; for (i=0; i= n) { printf("+++ Invalid sequence\n"); return 0; } csort(A,n,k); k = A[0].deg; A[0].deg = 0; for (i=1; i<=k; ++i) { --A[i].deg; M[A[0].id][A[i].id] = M[A[i].id][A[0].id] = 1; } } return 1; } /* This is the handshake function, the Boesch--Harary algorithm */ int genmultigraph ( int M[][N_MAX], pair A[], int n ) { int i, j, k, l, m; for (i=0; i m) { m = A[i].deg; k = i; } /* and max indices are different */ } M[A[j].id][A[k].id] = l; M[A[k].id][A[j].id] = l; A[j].deg = 0; A[k].deg = m-l; } return 1; } void prngraph ( int M[][N_MAX], int n ) { int i, j, rowsum, colsum[N_MAX]; for (i=0; i