/* testINPUTWGRAPH.c */

#include <stdio.h>
int INPUTW2GRAPH(int*,int*,int*,int*,char*);

#define NN 1000

void main(void)
{
 int K,N,
     A[NN],B[NN],CAP[NN],FLOW[NN],SIGN[NN];
 char
  /*   WG[]= "[-1,2,3,4,5,#4,5,2,12,  -2,3,5,#3,1,   -3,4,8,#1,13,  -4,6,#11,/"
            "-5,7,8,#6,9,  -6,8,#8,  -7,8,#7]"; */

     WG[] = "[-1,2,3,4,#5,4,6,&5,1,4,6,  -2,6,#6,&6,/"
              "-3,1,2,4,#4,2,3,&1,0,1,   -4,2,5,#2,3,&1,2,/"
              "-5,7,#5,&5,   -6,4,5,7,#4,4,4,&0,3,3]";

  for (K=0; K<NN; K++) FLOW[K]=SIGN[NN]=0;

  N = INPUTW2GRAPH(A,B,CAP,FLOW,WG);
  printf("%d weighted links\n",N);

 for (K=0; K<N; K++) printf("%3d,",A[K]); puts("");
 for (K=0; K<N; K++) printf("%3d,",B[K]); puts("");
 for (K=0; K<N; K++) printf("%3d,",CAP[K]); puts("");
 for (K=0; K<N; K++) printf("%3d,",FLOW[K]); puts("");



 getchar();
}
  /****************************************/

int INPUTW2GRAPH(int *P, int *Q, int *R1, int *R2, char *WG)
{
 int I,J,K,TCNT=0,CNT1,CNT2;

 I=0;
NEWCLUSTER:
 while (WG[I]==' ') I++;            /* pass over any blanks */
 if (WG[I]==']') {*P=0; *Q=0; *R1=0; *R2=0; return TCNT;} /* found ] = end of data */

 while (WG[I]!='-')I++;            /* start with negative integer */
  I++; K=0;
  while (WG[I]!=',') {K = 10*K + WG[I]-48; I++;}
  *P=J=K; CNT1=CNT2=0;                        /* WG[I] = , */
LP:
  I++;
  if (WG[I] == '#') goto WEIGHTS;
  K=0; while (WG[I]!=',') {K = 10*K + WG[I]-48; I++;}
  *Q=K; *P=J; CNT1++; CNT2++; TCNT++;     TCNT=TCNT;  /* needed to use TCNT */
  P++; Q++;
  goto LP;

WEIGHTS:
  while (CNT1>0)
   {
    I++; if (WG[I]==',') I++;
    K=0; while ((WG[I]>='0') && (WG[I]<='9')) {K = 10*K + WG[I]-48; I++;}
    *R1=K; R1++;
    CNT1--;
   }
 if (WG[I]==',') I++;
 if (WG[I]!='&') goto NEWCLUSTER;

  while (CNT2>0)
   {
    I++; if (WG[I]==',') I++;
    K=0; while ((WG[I]>='0') && (WG[I]<='9')) {K = 10*K + WG[I]-48; I++;}
    *R2=K; R2++;
    CNT2--;
   }

 goto NEWCLUSTER;

}

