USACO 2.4.1 The Tamworth Two

1682 ワード

構想:まず牛と人の最初の位置を見つけて、それからそれぞれ彼らが森の中で歩くことを模擬して、彼らがそれぞれ自分で歩く経路を記録します.そして配列を巡り、彼らの位置が同じになると、出会った.もし多くの后で彼らが出会っていないならば彼を思って、彼らは出会うことはできません!
ソース:
/*
ID: supersnow0622
PROG: test
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
char ch[20][20];
int John[500][2];
int Cow[500][2];
int Cx,Cy,Fx,Fy;
void walk(int Cow[500][2],int Cx,int Cy)
{
   int count1=0;
   while(count1<=400)
    {
       while(Cx>=1&&ch[Cx][Cy]!='*')
       {
         Cow[count1][0]=Cx--;
         Cow[count1++][1]=Cy;
       }
       Cx++;
       while(Cy<=10&&ch[Cx][Cy]!='*')
       {
         Cow[count1][0]=Cx;
         Cow[count1++][1]=Cy++;
       }
       Cy--;
       while(Cx<=10&&ch[Cx][Cy]!='*')
       {
         Cow[count1][0]=Cx++;
         Cow[count1++][1]=Cy;
       }
       Cx--;
       while(Cy>=1&&ch[Cx][Cy]!='*')
       {
         Cow[count1][0]=Cx;
         Cow[count1++][1]=Cy--;
       }
       Cy++;
    }
}
int main() {
    ofstream fout ("test.out");
    ifstream fin ("test.in");
    for(int i=1;i<11;i++)
     for(int j=1;j<11;j++)
      {
        cin>>ch[i][j];
        if(ch[i][j]=='C')
          {
            Cx=i;Cy=j;
          }
        if(ch[i][j]=='F')
        {
           Fx=i;Fy=j;
        }
      }
     walk(John,Fx,Fy);
     walk(Cow,Cx,Cy);
     for(int i=0;i<400;i++)
     {
       if(John[i][0]==Cow[i][0]&&John[i][1]==Cow[i][1])
       {
         cout<<i;
         return 0;
       }
     }
     cout<<0;
    return 0;
}