#include<stdio.h>
long f[1002][1002],x[1000000],y[1000000],s=1,
p[1002][1002],xd[3]={0,1,-1},yd[3]={0,1,-1};
void sign(long a,long b)
{
long t=f[a][b],ii,jj;
f[a][b]=s;
for(ii=0;ii<3;ii++)
for(jj=0;jj<3;jj++)
if(f[a+xd[ii]][b+yd[jj]]==t)
sign(a+xd[ii],b+yd[jj]);
}
main()
{
char t;
long n,k,i,j,l,m;
scanf("%ld%ld",&n,&k);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
t=getchar();
if(t=='1')f[i][j]=-1;
else f[i][j]=-2;
}
getchar();
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(f[i][j]<0)
{
sign(i,j);
s++;
}
j=0;
for(i=1;i<=n;i++)
{
p[1][i]=p[n][i]=1;
x[j]=1;y[j++]=i;
x[j]=n;y[j++]=i;
p[i][0]=p[i][n]=10000;
}
for(i=0;i<=n+1;i++)p[0][i]=p[n][i]=10000;
for(i=2;i<n;i++)
{
p[i][1]=p[i][n]=1;
x[j]=i;y[j++]=1;
x[j]=i;y[j++]=n;
}
i=0;
while(i<j)
{
for(l=0;l<3;l++)
for(m=0;m<3;m++)
if(!p[x[i]+xd[l]][y[i]+yd[m]])
{
p[x[i]+xd[l]][y[i]+yd[m]]=p[x[i]][y[i]];
if(f[x[i]+xd[l]][y[i]+yd[m]]!=f[x[i]][y[i]])
p[x[i]+xd[l]][y[i]+yd[m]]++;
x[j]=x[i]+xd[l];
y[j++]=y[i]+yd[m];
}
i++;
}
for(i=0;i<k;i++)
{
scanf("%ld%ld",&j,&n);
printf("%ld\n",p[j][n]>>1);
}
getchar();
getchar();
getchar();
}
这程序运行到while上面i=0一句之后,用devcpp调试里的查看显示i始终为10,而我加了句printf,就是0.。。
请问这是怎么回事?
long f[1002][1002],x[1000000],y[1000000],s=1,
p[1002][1002],xd[3]={0,1,-1},yd[3]={0,1,-1};
void sign(long a,long b)
{
long t=f[a][b],ii,jj;
f[a][b]=s;
for(ii=0;ii<3;ii++)
for(jj=0;jj<3;jj++)
if(f[a+xd[ii]][b+yd[jj]]==t)
sign(a+xd[ii],b+yd[jj]);
}
main()
{
char t;
long n,k,i,j,l,m;
scanf("%ld%ld",&n,&k);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
t=getchar();
if(t=='1')f[i][j]=-1;
else f[i][j]=-2;
}
getchar();
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(f[i][j]<0)
{
sign(i,j);
s++;
}
j=0;
for(i=1;i<=n;i++)
{
p[1][i]=p[n][i]=1;
x[j]=1;y[j++]=i;
x[j]=n;y[j++]=i;
p[i][0]=p[i][n]=10000;
}
for(i=0;i<=n+1;i++)p[0][i]=p[n][i]=10000;
for(i=2;i<n;i++)
{
p[i][1]=p[i][n]=1;
x[j]=i;y[j++]=1;
x[j]=i;y[j++]=n;
}
i=0;
while(i<j)
{
for(l=0;l<3;l++)
for(m=0;m<3;m++)
if(!p[x[i]+xd[l]][y[i]+yd[m]])
{
p[x[i]+xd[l]][y[i]+yd[m]]=p[x[i]][y[i]];
if(f[x[i]+xd[l]][y[i]+yd[m]]!=f[x[i]][y[i]])
p[x[i]+xd[l]][y[i]+yd[m]]++;
x[j]=x[i]+xd[l];
y[j++]=y[i]+yd[m];
}
i++;
}
for(i=0;i<k;i++)
{
scanf("%ld%ld",&j,&n);
printf("%ld\n",p[j][n]>>1);
}
getchar();
getchar();
getchar();
}
这程序运行到while上面i=0一句之后,用devcpp调试里的查看显示i始终为10,而我加了句printf,就是0.。。
请问这是怎么回事?

