- Description
Tom和Jerry在10*10的方格中:
……..
……*…
……..
……….
…*.C….
…..…
…*……
..M……*
….….
..……
C=Tom(猫)
M=Jerry(老鼠)
*=障碍物
.=空地
他们各自每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。
他们移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。
- Input
10行,格式如上
- Output
相遇时间T。如果无解,输出-1。
- Sample Input
……..
……*…
……..
……….
…*.C….
…..…
…*……
..M……*
….….
..……
- Sample Output
49
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[12][12]={"************","* *","* *","* *","* *","* *",\
"* *","* *","* *","* *","* *","************"};
int i,j,x1,x=1,y=1,y1,x2,y2,m,n,count=0;//char a[6][6]={"*****","*.*C.*","*.*..*","*..M.*","******"};
for(i=1;i<=10;i++)
{
for(j=1;j<=10;j++)
{ a[i][j]=getchar();if(a[i][j]=='C')x1=i,y1=j;if(a[i][j]=='M')x2=i,y2=j;}
getchar();
}
for(i=x1,j=y1,m=x2,n=y2;count<50000000;)
{
switch(x)
{case 1:if(a[i-1][j]!='*'){i--;x=1;break;}else x=2;break;
case 2:if(a[i][j+1]!='*'){j++;x=2;break;}else x=3;break;
case 3:if(a[i+1][j]!='*'){i++;x=3;break;}else x=4;break;
case 4:if(a[i][j-1]!='*'){j--;x=4;break;}else x=1;break;
}
switch(y)
{repeat2:case 1:if(a[m-1][n]!='*'){m--;y=1;break;}else y=2;break;
case 2:if(a[m][n+1]!='*'){n++;y=2;break;}else y=3;break;
case 3:if(a[m+1][n]!='*'){m++;y=3;break;}else y=4;break;
case 4:if(a[m][n-1]!='*'){n--;y=4;break;}else y=1;break;
}
count++;
if(i==m&&n==j)
break;
}
if(count==50000000)
printf("-1\n");
else
printf("%d\n",count);
return 0;
}