以下是代码,思路见注释,想知道为什么只有30
(而且我第一个检测点下载的数据本地测试能过,也WA了)
#include<stdio.h>
char map[12][12];
int time=0;
int cx,cy;
int fx,fy;
int main()
{
//边界设置为障碍
for(int i=0;i<12;i++)
{
map[0][i]='*';
map[11][i]='*';
}
for(int i=0;i<12;i++)
{
map[i][0]='*';
map[i][11]='*';
}
//读取地图,同时读取并清空CF的位置
for(int i=1;i<11;i++)
{
for(int j=1;j<11;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='C')
{
cx=i;
cy=j;
map[i][j]='.';
}
if(map[i][j]=='F')
{
fx=i;
fy=j;
map[i][j]='.';
}
}
getchar();
}
//flag表示方向
int flagf=1;
int flagc=1;
for(;;)
{
if(cx==fx&&cy==fy)
{
printf("%d",time);
return 0;
}
if(time>100000)//投机取巧QWQ
{
printf("0");
return 0;
}
//牛移动
if(flagc%4==2)
{
if(map[cx][cy+1]=='*')
{
flagc++;
}
else if(map[cx][cy+1]=='.')
{
cy++;
}
}
else if(flagc%4==3)
{
if(map[cx+1][cy]=='*')
{
flagc++;
}
else if(map[cx+1][cy]=='.')
{
cx++;
}
}
else if(flagc%4==0)
{
if(map[cx][cy-1]=='*')
{
flagc++;
}
else if(map[cx][cy-1]=='.')
{
cy--;
}
}
else if(flagc%4==1)
{
if(map[cx-1][cy]=='*')
{
flagc++;
}
else if(map[cx-1][cy]=='.')
{
cx--;
}
}
//人移动
if(flagf%4==2)
{
if(map[fx][fy+1]=='*')
{
flagf++;
}
else if(map[fx][fy+1]=='.')
{
fy++;
}
}
else if(flagf%4==3)
{
if(map[fx+1][fy]=='*')
{
flagf++;
}
else if(map[fx+1][fy]=='.')
{
fx++;
}
}
else if(flagf%4==0)
{
if(map[fx][fy-1]=='*')
{
flagf++;
}
else if(map[fx][fy-1]=='.')
{
fy--;
}
}
else if(flagf%4==1)
{
if(map[fx-1][fy]=='*')
{
flagf++;
}
else if(map[fx-1][fy]=='.')
{
fx--;
}
}
time++;
}
}
感谢你看到这里!求解惑