题目链接:P1518
这道题发呆了很久,一直卡在第四个测试点。
试了很多方法,比如把scanf(%c)改为scanf(%s),再改为gets。均未成功。
然后又改判断是否可以相遇的条件,共有三种:
1.六维数组储存cow和farmer的情况(row,column,diretion)
2.六个数分别乘以1,10,100,1000,10000,100000储存;
3.直接通过计数器判断,当计数器大于100000时,便可认为不会相遇。
仍然不行。
又觉得在判断上可能数组越界。
最后将判断障碍(*)改为判断是否可走(.),同时也将初始cow和farmer的位置改为(.)。
Accepted!
然后将上述的条件随便改,只要判断障碍改了,都会Accepted。迷惑!
ac代码:
#include<stdio.h>
struct location{
int row;
int column;
int direction;
}farmer,cow;
int main()
{
char a[12][12];
int i,j;
for(i=0;i<10;i++)
{
gets(a[i]);
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(a[i][j]=='F')
{
farmer.row=i;
farmer.column=j;
farmer.direction=1;
a[i][j]='.';
}
if(a[i][j]=='C')
{
cow.row=i;
cow.column=j;
cow.direction=1;
a[i][j]='.';
}
}
}
int cnt=0;
while(1)
{
if(farmer.direction%4==1)
{
if(farmer.row-1!=-1&&a[farmer.row-1][farmer.column]=='.')
{
farmer.row--;
}else
{
farmer.direction++;
}
}else if(farmer.direction%4==2)
{
if(farmer.column+1!=10&&a[farmer.row][farmer.column+1]=='.')
{
farmer.column++;
}else
{
farmer.direction++;
}
}else if(farmer.direction%4==3)
{
if(farmer.row-1!=10&&a[farmer.row+1][farmer.column]=='.')
{
farmer.row++;
}else
{
farmer.direction++;
}
}else if(farmer.direction%4==0)
{
if(farmer.column-1!=-1&&a[farmer.row][farmer.column-1]=='.')
{
farmer.column--;
}else
{
farmer.direction++;
}
}
if(cow.direction%4==1)
{
if(cow.row-1!=-1&&a[cow.row-1][cow.column]=='.')
{
cow.row--;
}else
{
cow.direction++;
}
}else if(cow.direction%4==2)
{
if(cow.column+1!=10&&a[cow.row][cow.column+1]=='.')
{
cow.column++;
}else
{
cow.direction++;
}
}else if(cow.direction%4==3)
{
if(cow.row+1!=10&&a[cow.row+1][cow.column]=='.')
{
cow.row++;
}else
{
cow.direction++;
}
}else if(cow.direction%4==0)
{
if(cow.column-1!=-1&&a[cow.row][cow.column-1]=='.')
{
cow.column--;
}else
{
cow.direction++;
}
}
if(farmer.row==cow.row&&farmer.column==cow.column)
{
cnt++;
break;
}else
{
cnt++;
}
if(cnt>100000)
{
printf("0");
return 0;
}
}
printf("%d",cnt);
return 0;
}
这是之前的判断条件:
if(cow.column-1!=0&&a[cow.row][cow.column-1]!='*')
{
cow.column--;
}else
{
cow.direction++;
}
希望有大佬可以指点迷津!