USACO 2.4.1 The Tamworth Two

思路:首先找到牛和人的最初的位置,然后分别模拟他们在森林中走路,记录一下他们各自行走的路径。然后遍历数组,当他们所在位置相同时,就相遇了。如果在很多不之后他们没有相遇就认为他,他们不会相遇了!

源代码:

/*
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;
}



你可能感兴趣的:(USACO 2.4.1 The Tamworth Two)