两只塔姆沃斯牛

· · 个人记录

[USACO2.4]两只塔姆沃斯牛 The Tamworth Two

所有的题解来源于先前存在的题解

注释有点少,凑合着看吧

code:

#inlcude<bits/stdc++.h>//万能头nb
#include<Windows.h>//你谷不能用Windows.h,记得注释掉^_^
using namespace std;
char map1[10][10];//初始化地图 
int cfx=1,ffx=1;//1为北,2为东,3为南,4为西,牛和农夫的方向 
int cw[2],fw[2];//牛和农夫位置 
bool ztc=0,ztf=0;//牛与农夫暂停1min 
unsigned long long sum=0;//计数器 
int mian()
{
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            cin>>map1[i][j];
            if(map1[i][j]=='C')
            {
                cw[0]=i;//行 
                cw[1]=j;//列 
            }
            if(map1[i][j]=='F')
            {
                fw[0]=i;//行 
                fw[1]=j;//列 
            }
        }
    }//读入地图,农夫和牛的位置 
    whlie(1)
    {
        if(sum>40000)//玄学判断,走了辣么多次还追不到,就莫得希望了
        {
            cout<<0;
            return 0;
        }

        /*system("cls");
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                cout<<map1[i][j]; 
            }
            cout<<endl;
        }//用来看移动轨迹 
        cout<<sum;*/

        sum++;
        //方向改变
        if(ztc==1)
        {
            ztc=0;
            cfx++;
        } 
        if(ztf==1)
        {
            ztf=0;
            ffx++;
        }
        if(cfx>4)
        {
            cfx-=4;
        }
        if(ffx>4)
        {
            ffx-=4;
        }
        if(cfx==1)//北
        {
            if(map1[cw[0]-1][cw[1]]!='*'&&cw[0]!=0)//cow位置判断
            {
                map1[cw[0]-1][cw[1]]='C';
                map1[cw[0]][cw[1]]='.';
                cw[0]--;//cow位置
            } 
            else
            {
                ztc=1;
            }
        } 
        if(ffx==1)
        {
            if(map1[fw[0]-1][fw[1]]!='*'&&fw[0]!=0)//农夫位置判断
            {
                map1[fw[0]-1][fw[1]]='F';
                map1[fw[0]][fw[1]]='.';
                fw[0]--;//农夫位置 
            }
            else
            {
                ztf=1;
            } 
        }
        if(cfx==2)//东 
        {
            if(map1[cw[0]][cw[1]+1]!='*'&&cw[1]!=9)//cow位置判断
            {
                map1[cw[0]][cw[1]+1]='C';
                map1[cw[0]][cw[1]]='.';
                cw[1]++;//cow位置
            } 
            else
            {
                ztc=1;
            }
        }
        if(ffx==2)
        {
            if(map1[fw[0]][fw[1]+1]!='*'&&fw[1]!=9)//农夫位置判断
            {
                map1[fw[0]][fw[1]+1]='F';
                map1[fw[0]][fw[1]]='.';
                fw[1]++;//农夫位置
            }
            else
            {
                ztf=1;
            }
        }
        if(cfx==3)//南 
        {
            if(map1[cw[0]+1][cw[1]]!='*'&&cw[0]!=9)//cow位置判断
            {
                map1[cw[0]+1][cw[1]]='C';
                map1[cw[0]][cw[1]]='.';
                cw[0]++;//cow位置
            } 
            else
            {
                ztc=1;
            }
        }
        if(ffx==3)
        {
            if(map1[fw[0]+1][fw[1]]!='*'&&fw[0]!=9)//农夫位置判断
            {
                map1[fw[0]+1][fw[1]]='F';
                map1[fw[0]][fw[1]]='.';
                fw[0]++;//农夫位置 
            }
            else
            {
                ztf=1;
            }
        }
        if(cfx==4)//西 
        {
            if(map1[cw[0]][cw[1]-1]!='*'&&cw[1]!=0)//cow位置判断
            {
                map1[cw[0]][cw[1]-1]='C';
                map1[cw[0]][cw[1]]='.';
                cw[1]--;//cow位置
            } 
            else
            {
                ztc=1;
            }
        }
        if(ffx==4)
        {
            if(map1[fw[0]][fw[1]-1]!='*'&&fw[1]!=0)//农夫位置判断
            {
                map1[fw[0]][fw[1]-1]='F';
                map1[fw[0]][fw[1]]='.';
                fw[1]--;//农夫位置 
            }
            else
            {
                ztf=1;
            }
        } 
        if(cw[0]==fw[0]&&cw[1]==fw[1])//两只牛被农夫逮到了
        {
            break;
        }
    }
    cout<<sum;//输出
    return 0;//完结!
}