P1518:判断条件不同,竟然会影响AC?!

https://blog.csdn.net/SillyGOAT/article/details/120951886

详细见我上方的博客!

这样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;
}

然而这样:

#include<stdio.h>


struct location{
    int row;
    int column;
    int direction;
}farmer,cow;

int main()
{
    char a[12][13];
    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;
            }
            if(a[i][j]=='C')
            {
                cow.row=i;
                cow.column=j;
                cow.direction=1;
            }
        }
    }
    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;
}

就是会卡在第四个测试点:

img

区别只有判断是否可走的条件上:(判断 . 的话自然要将初始位置改为 . )

if(cow.column-1!=-1&&a[cow.row][cow.column-1]!='*')
            {
                cow.column--;
            }else
            {
                cow.direction++;
            }

if(farmer.row-1!=-1&&a[farmer.row-1][farmer.column]=='.')
            {
                farmer.row--;
            }else
            {
                farmer.direction++;
            }

!='*' 还可能是其他值啊。
如果是字母你不是判断错了?

img