描述
Tom和Jerry在10*10的方格中:
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......
C=Tom(猫) M=Jerry(老鼠) *=障碍物 .=空地
他们各自每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。 他们移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。 编程计算多少秒以后他们相遇。
输入
10行,格式如上
输出
相遇时间T。如果无解,输出-1。
样例输入
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......* .
..*.*....
.*.*......
样例输出
49
#include <iostream> using namespace std; char s[12][12]; void meet(int &x,int &y,int &f) { if(f==1) { if(s[x-1][y]!='*') x--; else { f=2; return; } } if(f==2) { if(s[x][y+1]!='*') y++; else { f=3; return; } } if(f==3) { if(s[x+1][y]!='*') x++; else { f=4; return; } } if(f==4) { if(s[x][y-1]!='*') y--; else { f=1; return; } } } int main() { //freopen("a.txt","r",stdin); int i,j,t=0; int a,b,c,d; for(i=-1;i<11;i++) for(j=-1;j<11;j++) s[i][j]='*'; for(i=0;i<10;i++) for(j=0;j<10;j++) { cin>>s[i][j]; if(s[i][j]=='C') { a=i; b=j; } if(s[i][j]=='M') { c=i; d=j; } } int f1=1,f2=1; while(a!=c||b!=d) { meet(a,b,f1); meet(c,d,f2); t++; if(t>100000) { t=-1; break; } } cout<<t<<endl; return 0; }