Dear all :

This is my program,I can't find the bug.Someone can check for me,please!

/* Lower Bound Program(6-1) Version 1.1 */
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 99
#define jobs 999
#define bigM 29999

// input cost matrix a[][] and its size nn
// output the minimum assignment cost z
int a[jobs][jobs];
int ap(int nn)
{
//extern int a[jobs][jobs];
int f[jobs],uk[jobs],ar[jobs][jobs];
int u[jobs],v[jobs],fb[jobs],p[jobs],lr[jobs],pi[jobs],rc[jobs];
int uc[jobs];
int i,j,j0;
int inf=bigM;
int ii=1;
int mm,k,min,ia,r,z,jmin,kk,nuc,nlr,l,jj;

//phase 1 of init
mm=0;
for(k=1;k<=nn;k++)
{
f[k]=0;
fb[k]=0;
}

for(j=1;j<=nn;j++)
{
min=inf;
for(i=1;i<=nn;i++)
{
ia=a[i][j];
if (ia > min) continue;
if (ia < min) goto L20;
if (f[i]!=0) continue;
L20:
min=ia;
r=i;
} //30
v[j]=min;
if(f[r]==0)
{
mm=mm+1;
fb[j]=r;
f[r]=j;
u[r]=0;
p[r]=j+1;
}
} //40

//phase 2
for(i=1;i<=nn;i++)
{
if(f[i]!=0) goto L110;

min=inf;
for(k=1;k<=nn;k++)
{
ia=a[i][k]-v[k];
if (ia > min) continue;
if (ia < min) goto L50;
if (fb[k]!=0) continue;
if (fb[j]==0) continue;
L50:
min=ia;
j=k;
} //60
u[i]=min;
jmin=j;
if (fb[j]==0) goto L100;
for(j=jmin;j<=nn;j++)
{
if(a[i][j]-v[j]<=min)
{
r=fb[j];
kk=p[r];
if(kk<=nn)
{
for(k=kk;k<=nn;k++)
{
if (fb[k] > 0) continue;
if (a[r][k]-u[r]-v[k]==0) goto L90;
} // 70
p[r]=nn+1;
}
}
} // 80
goto L110;
L90:
f[r]=k;
fb[k]=r;
p[r]=k+1;
L100:
mm+=1;
f[i]=j;
fb[j]=i;
p[i]=j+1;
L110:
} //110



if(mm==nn) goto apc20;
else
for (i=1;i<=nn;i++)
{
if (f[i] > 0) continue;
//printf("I'm in path\n");
//printf(" i = %d\n",i);
// path
ii=i;
lr[1]=ii;
for(k=1;k<=nn;k++)
{
//printf("k=[%d] ii=[%d]\n",k,ii);
pi[k]=a[ii][k]-u[ii]-v[k];
rc[k]=ii;
uc[k]=k;
}// 10
nuc=nn;
nlr=1;
goto path40;

path20:
r=lr[nlr];
for(l=1;l<=nuc;l++)
{
j0=uc[l];
ia=a[r][j0]-u[r]-v[j0];
if(ia<pi[j0])
{
pi[j0]=ia;
rc[j0]=r;
}
} // 30
goto path40;


path40:
for(l=1;l<=nuc;l++)
{
j0=uc[l];
if(pi[j0]==0)
goto path100;
} // 50
min=inf;
for(l=1;l<=nuc;l++)
{
j0=uc[l];
if(min>pi[j0])
min=pi[j0];
} // 60
for(l=1;l<=nlr;l++)
{
r=lr[l];
u[r]=u[r]+min;
}// 70
for(j0=1;j0<=nn;j0++)
{
if(pi[j0]==0)
v[j0]=v[j0]-min;
else
pi[j0]=pi[j0]-min;
}// 90
goto path40;


path100:
if(fb[j0]!=0)
{
nlr=nlr+1;
lr[nlr]=fb[j0];
uc[l]=uc[nuc];
nuc=nuc-1;
goto path20;
}
else
j=j0;
// incr
incr:
//printf("I'm in incr\n");
i=rc[j];
//printf(" i=rc[j]=%d\n",i);
fb[j]=i;
jj=f[i];
f[i]=j;
j=jj;
if(j>0)
goto incr;
} // 10

apc20:
//for (k=1;k<=nn;k++) printf("f[%d] = %d\n",k,f[k]);
//printf("\n");
z=0;
for(k=1;k<=nn;k++)
{
//printf("u[%d]=[%d] v[%d]=[%d]\n",k,u[k],k,v[k]);
z=z+u[k]+v[k];
}
//printf("\n i=[%d] z=[%d]\n",i,z);

//getch();
//exit(1);
return(z);
}

void main()
{
int i,j,i1,i2,j1,j2,k,n,tc,pos,seed,loop,temp[4],bs[2][MAX]; //pos¬°±Æ©ñ¤§¦ì¸m
int p1[2][MAX],p2[2][MAX],c1[2][MAX],c2[2][MAX],c[2];
int ii,jj;
for(i=0;i<=MAX;i++)
{
bs[0][i]=0;bs[1][i]=0;p1[0][i]=0;p1[1][i]=0;p2[0][i]=0;p2[1][i]=0;
c1[0][i]=0;c1[1][i]=0;c2[0][i]=0;c2[1][i]=0;c[0]=0;c[1]=0;
}

printf("Please enter the number of jobs:"); //©w¸q¤u¥ó¼Æ
scanf("%d",&n);
k=2*n;
printf(" Please input a new seed...==>"); //©w¸q¶Ã¼ÆºØ¤l
scanf("%d",&seed);
srand(seed);

for(loop=1;loop<=1;loop++) //©w¸q°j¦¸¼Æ
{
for(i=1;i<=k;i++) //²£¥Í³BÍù®É¶¡
{
bs[0][i]=i;
bs[1][i]=random(10)+1;
}
for(i=1;i<=n;i++) //±N³B²z®É¶¡¹ïÀ³¨ì¤G³¡¾÷¾¹¤W
{
p1[0][i]=i;
p1[1][i]=bs[1][i];
p2[0][i]=i;
p2[1][i]=bs[1][i+n];
}

for(i=1;i<=n;i++) //¥D°j°é¶}©l
{
temp[0]=p1[0][1]; //¨Ì§Ç±N¤u¥ó±Æ©ñ¦Ü²Ä¤@¦ì
temp[1]=p1[1][1];
temp[2]=p2[0][1];
temp[3]=p2[1][1];
p1[0][1]=p1[0][i];
p1[1][1]=p1[1][i];
p2[0][1]=p2[0][i];
p2[1][1]=p2[1][i];
p1[0][i]=temp[0];
p1[1][i]=temp[1];
p2[0][i]=temp[2];
p2[1][i]=temp[3];
temp[0]=0;
temp[1]=0;
temp[2]=0;
temp[3]=0;


for(j1=2;j1<n;j1++) //±N²Ä¤G*Ó¤u¥ó¥H«á¨ÌSPT*«·s±Æ¦C
{
for(j2=j1+1;j2<=n;j2++)
{
if(p1[1][j1]>p1[1][j2])
{
temp[0]=p1[0][j1];
temp[1]=p1[1][j1];
p1[0][j1]=p1[0][j2];
p1[1][j1]=p1[1][j2];
p1[0][j2]=temp[0];
p1[1][j2]=temp[1];
}
}
}

for(j1=2;j1<n;j1++)
{
for(j2=j1+1;j2<=n;j2++)
{
if(p2[1][j1]>p2[1][j2])
{
temp[2]=p2[0][j1];
temp[3]=p2[1][j1];
p2[0][j1]=p2[0][j2];
p2[1][j1]=p2[1][j2];
p2[0][j2]=temp[2];
p2[1][j2]=temp[3];
}
}
}


for(pos=2;pos<=n;pos++) //¥H²Ä¤@*Ó¤u¥ó¬°¥D¡A©ñ¦b¦U*Ó¦ì¸m
{
c[0]=p1[1][1];
c[1]=p2[1][1];
for(i1=1;i1<=pos-1;i1++)
{
c[0]=c[0]+p1[1][i1+1];
c[1]=c[1]+p2[1][i1+1];
}
if(c[0]>c[1])
{a[i][pos]=c[0];}
else
{a[i][pos]=c[1];}
a[i][1]=p1[1][1]+p2[1][1];

}

for(j1=1;j1<n;j1++)
{
for(j2=j1+1;j2<=n;j2++)
{
if(p1[0][j1]>p1[0][j2])
{
temp[0]=p1[0][j1];
temp[1]=p1[1][j1];
p1[0][j1]=p1[0][j2];
p1[1][j1]=p1[1][j2];
p1[0][j2]=temp[0];
p1[1][j2]=temp[1];
}
}
}

for(j1=1;j1<n;j1++)
{
for(j2=j1+1;j2<=n;j2++)
{
if(p2[0][j1]>p2[0][j2])
{
temp[2]=p2[0][j1];
temp[3]=p2[1][j1];
p2[0][j1]=p2[0][j2];
p2[1][j1]=p2[1][j2];
p2[0][j2]=temp[2];
p2[1][j2]=temp[3];
}
}
}

}
for(ii=1;ii<=n;ii++)
{
for(jj=1;jj<=n;jj++)
{ printf(" %d",a[ii][jj] );}
printf("\n");
}
getch();

} // loop
tc=ap(n);
printf("%d\n",tc);
getch();
}

Everytime it will have error when calls the subfunction "ap".
Please help me ,thanks very much