测试结果2: 通过本测试点|有效耗时47ms
测试结果3: 通过本测试点|有效耗时47ms
测试结果4: 测试结果错误.错误结果为:11
正确结果应为:8
测试结果5: 通过本测试点|有效耗时47ms
测试结果6: 输出过长|用户输出数据超过标准输出两倍[标准输出2位|选手输出12位]
测试结果7: 输出过长|用户输出数据超过标准输出两倍[标准输出2位|选手输出12位]
测试结果8: 通过本测试点|有效耗时47ms
测试结果9: 输出过长|用户输出数据超过标准输出两倍[标准输出3位|选手输出12位]
测试结果10:通过本测试点|有效耗时47ms
求解……
#include<stdio.h>
#include<string.h>
main()
{
char wow[101][101];
int a[101][101],b[101][101],f[101][101];
int x[10001],y[10001];
int n,m,i,j,l,r,tx,ty;
int dx[2]={0,1},dy[2]={1,0};
memset(f,-1,sizeof(f));
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
scanf("%s",wow[i]);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(wow[i][j]=='0')
{
a[i][j]=i;
b[i][j]=j;
}
else
if(wow[i][j]=='1')
{
a[i][j]=-1;
b[i][j]=-1;
}
else
{
for(l=0;l<n;l++)
for(r=0;r<m;r++)
if(wow[l][r]==wow[i][j]&&(l!=i||r!=j))
{
a[i][j]=l;
b[i][j]=r;
break;
}
}
l=0;r=1;
x[1]=0;
y[1]=0;
f[0][0]=0;
while(l<r)
{
l++;
tx=x[l];
ty=y[l];
if(tx==n-1&&ty==m-1)
break;
for(i=0;i<2;i++)
{
int qx=tx+dx[i],qy=ty+dy[i];
if(qx>=0&&qx<n&&qy>=0&&qy<m)
if(a[qx][qy]==qx&&b[qx][qy]==qy)
{
if(f[tx][ty]+1<f[qx][qy]||f[qx][qy]==-1)
{r++;
x[r]=qx;y[r]=qy;
f[qx][qy]=f[tx][ty]+1;
}}
else
if(a[qx][qy]!=-1&&b[qx][qy]!=-1)
{
r++;
x[r]=a[qx][qy];
y[r]=b[qx][qy];
f[a[qx][qy]][b[qx][qy]]=f[tx][ty]+1;
a[a[qx][qy]][b[qx][qy]]=a[qx][qy];
b[a[qx][qy]][b[qx][qy]]=b[qx][qy];
a[qx][qy]=qx;
b[qx][qy]=qy;
}
}
}
if(f[n-1][m-1]==-1)
printf("No Solution.");
else
printf("%d",f[n-1][m-1]);
return 0;
}