The Tamworth Two

題目網址:http://wenku.baidu.com/view/816dfaf29e31433239689324.html
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
	ifstream fin ("ttwo.in");
	ofstream fout ("ttwo.out");
	char pos[11][11]={'d'};
	int cpos[3]={1,2,3},fpos[3]={4,5,6};
	char cflag='u';//u:up;d:down
	char fflag='u';
	int step=0;
	int i,j;
	for(i=1;i<=10;i++)
	{
		for(j=1;j<=10;j++)
		{
			fin>>pos[i][j];
		}
	}
	for(i=1;i<=10;i++)
	{
		for(j=1;j<=10;j++)
		{
			if(pos[i][j]=='F')
			{
				fpos[1]=i;
				fpos[2]=j;
				pos[i][j]='.';
			}
			if(pos[i][j]=='C')
			{
				cpos[1]=i;
				cpos[2]=j;
				pos[i][j]='.';
			}
		}
	}
	//cout<<"cow init path:"<<cpos[1]<<' '<<cpos[2]<<endl;
	//cout<<"farmer init path:"<<fpos[1]<<' '<<fpos[2]<<endl;
	while(cpos[1]!=fpos[1]|| cpos[2]!=fpos[2])
	{
		step++;
		if(step>160000)
		{
			fout<<0<<endl;
			return 0;
		}
		if(cflag=='u')
		{
			if(cpos[1]>1 && (pos[cpos[1]-1][cpos[2]]=='.' || pos[cpos[1]-1][cpos[2]]=='F'))
			{
				cpos[1]-=1;
				//cout<<"cow path is up and cow path:"<<cpos[1]<<' '<<cpos[2]<<endl;
				goto label;
			}
		    else if((cpos[1]>1 && pos[cpos[1]-1][cpos[2]]=='*') || cpos[1]==1)
			{
				cflag='r';
				//cout<<"cow stop and turn right:"<<endl;
				goto label;
			}
         }
		if(cflag=='r')
		{
			if(cpos[2]<10 &&(pos[cpos[1]][cpos[2]+1]=='.' || pos[cpos[1]][cpos[2]+1]=='F'))
			{
				cpos[2]++;
				//cout<<"cow path is right and cow path:"<<cpos[1]<<' '<<cpos[2]<<endl;
				goto label;
			}
			else if((cpos[2]<10 && pos[cpos[1]][cpos[2]+1]=='*') || cpos[2]==10)
			{
				cflag='d';
				//cout<<"cow stop and turn down:"<<endl;
				goto label;
			}
		}
		if(cflag=='d')
		{
			if(cpos[1]<10 && (pos[cpos[1]+1][cpos[2]]=='.' || pos[cpos[1]+1][cpos[2]]=='F'))
			{
				cpos[1]++;
				//cout<<"cow path is down and cow path:"<<cpos[1]<<' '<<cpos[2]<<endl;
				goto label;
			}
			else if(cpos[1]==10 || (pos[cpos[1]+1][cpos[2]]=='*' && cpos[1]<10))
			{
				cflag='l';
				//cout<<"cow stop and turn left:"<<endl;
				goto label;
			}
		}
		if(cflag=='l')
		{
			if(cpos[2]>1 && (pos[cpos[1]][cpos[2]-1]=='.' || pos[cpos[1]][cpos[2]-1]=='F'))
			{
				cpos[2]--;
				//cout<<"cow path is left and cow path:"<<cpos[1]<<' '<<cpos[2]<<endl;
				goto label;
			}
			else if(cpos[2]==1 || (pos[cpos[1]][cpos[2]-1]=='*' && cpos[2]>1)){
				cflag='u';
				//cout<<"cow stop and turn up:"<<endl;
				goto label;
			}
		}

label:
		if(fflag=='u')
		{
			if(fpos[1]>1 && (pos[fpos[1]-1][fpos[2]]=='.' || pos[fpos[1]-1][fpos[2]]=='C'))
			{
				fpos[1]-=1;
				//cout<<"farmer path is up and farmer path:"<<fpos[1]<<' '<<fpos[2]<<endl;
				continue;
			}
		    else if((fpos[1]>1 && pos[fpos[1]-1][fpos[2]]=='*') || fpos[1]==1)
			{
				fflag='r';
				//cout<<"farmer stop and turn right:"<<endl;
				continue;
			}
         }
		if(fflag=='r')
		{
			if(fpos[2]<10 &&(pos[fpos[1]][fpos[2]+1]=='.' || pos[fpos[1]][fpos[2]+1]=='C'))
			{
				fpos[2]++;
				//cout<<"farmer path is right and farmer path:"<<fpos[1]<<' '<<fpos[2]<<endl;
				continue;
			}
			else if((fpos[2]<10 && pos[fpos[1]][fpos[2]+1]=='*') || fpos[2]==10)
			{
				fflag='d';
				//cout<<"farmer stop and turn down:"<<endl;
				continue;
			}
		}
		if(fflag=='d')
		{
			if(fpos[1]<10 && (pos[fpos[1]+1][fpos[2]]=='.' || pos[fpos[1]+1][fpos[2]]=='C'))
			{
				fpos[1]++;
				//cout<<"farmer path is down and farmer path:"<<fpos[1]<<' '<<fpos[2]<<endl;
				continue;
			}
			else if(fpos[1]==10 || (pos[fpos[1]+1][fpos[2]]=='*' && fpos[1]<10))
			{
				fflag='l';
				//cout<<"farmer stop and turn left:"<<endl;
				continue;
			}
		}
		if(fflag=='l')
		{
			if(fpos[2]>1 && (pos[fpos[1]][fpos[2]-1]=='.' || pos[fpos[1]][fpos[2]-1]=='C'))
			{
				fpos[2]--;
				//cout<<"farmer path is left and farmer path:"<<fpos[1]<<' '<<fpos[2]<<endl;
				continue;
			}
			else if(fpos[2]==1 || (pos[fpos[1]][fpos[2]-1]=='*' && fpos[2]>1))
			{
				fflag='u';
				//cout<<"farmer stop and turn up:"<<endl;
				continue;
			}
		}
     }
	fout<<step<<endl;
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章