/* TestProps2Ary.c */
/* testing subprogram Props2Ary */

#include <stdio.h>

int Props2Ary(int*,int*);

void main(void)
{
 int
  A[]={1,1,2,2,2,3,4,4,8,10,11,0},     /* Fig 1.2a */
  B[]={2,3,3,4,5,6,5,7,9,0, 0, 0},
 N;

 N = Props2Ary(A,B);



 getchar();
}


 /*******************************************/

 int Props2Ary(int *A, int *B)
 {
  int Npairs,Nlinked,Nisol,Nobj,K,   FLAG[1000];

  Npairs=K=0;
  while (A[K]) {Npairs++; K++;}
  for (K=1; K<=Npairs; K++) FLAG[K]=1;    FLAG[Npairs+1]=0;
  for (K=1; K<=Npairs; K++) if (!B[K]) FLAG[A[K]]=-1;
  Nlinked=Nisol=0;
  for (K=1; K<=Npairs; K++) if (FLAG[K]==1) Nlinked++; else Nisol++;

  Nobj = Nlinked+Nisol;
  printf("%d objects in graph     %d links\n",Nobj,Npairs-Nisol);

  printf("%d linked object(s):   ",Nlinked);
  for (K=1; K<=Npairs; K++) if (FLAG[K]>0) printf("%d ",K); puts("");

  printf("%d isolated object(s):   ",Nisol);
  for (K=1; K<=Npairs; K++) if (FLAG[K]<0) printf("%d ",K); puts("");


  return Npairs;
}


