讨论 / WA:60
gallon 2012-05-12 19:33:00
点我顶贴 收藏 删除
测试结果1: 通过本测试点|有效耗时94ms

测试结果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;

}

查看更多回复
提交回复