600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 南邮 OJ 1058 Tom and Jerry

南邮 OJ 1058 Tom and Jerry

时间:2022-03-27 20:28:20

相关推荐

南邮 OJ 1058 Tom and Jerry

Tom and Jerry

时间限制(普通/Java):1000 MS/3000 MS 运行内存限制 : 65536 KByte

总提交 : 251测试通过 : 98

比赛描述

Tom和Jerry在10*10的方格中:

*...*.....

......*...

...*...*..

..........

...*.C....

*.....*...

...*......

..M......*

...*.*....

.*.*......

C=Tom(猫)

M=Jerry(老鼠)

*=障碍物

.=空地

他们各自每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。

他们移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。

编程计算多少秒以后他们相遇。

输入

10行,格式如上

输出

相遇时间T。如果无解,输出-1。

样例输入

*...*.....

......*...

...*...*..

..........

...*.C....

*.....*...

...*......

..M......*

...*.*....

.*.*......

样例输出

49

题目来源

wwm

#include<iostream>#define NORTH 0 #define EAST 1#define SOUTH 2#define WEST 3using namespace std;struct point{int i;int j;char dir;};int main(){point C,M;char c[10][10];int T=0;for(int i=0;i<10;++i){for(int j=0;j<10;++j){cin>>c[i][j];if(c[i][j] == 'C'){c[i][j] = '.';C.i = i;C.j = j;C.dir = NORTH;}else if(c[i][j] == 'M'){c[i][j] = '.';M.i = i;M.j = j;M.dir = NORTH;}}}for(long i=0;i<10000;++i){//cout<<"step"<<T<<" M.i="<<M.i<<" M.j="<<M.j<<" M.dir="<<(int)M.dir<<" C.i="<<C.i<<" C.j="<<C.j<<" C.dir="<<(int)C.dir<<endl;if(C.i==M.i && C.j==M.j){cout<<T<<endl;return 0;}switch(C.dir){case NORTH:if(C.i>0 && c[C.i-1][C.j]=='.')--C.i;elseC.dir = EAST;break;case EAST:if(C.j<9 && c[C.i][C.j+1]=='.')++C.j;elseC.dir = SOUTH;break;case SOUTH:if(C.i<9 && c[C.i+1][C.j]=='.')++C.i;elseC.dir = WEST;break;case WEST:if(C.j>0 && c[C.i][C.j-1]=='.')--C.j;elseC.dir = NORTH;break;}switch(M.dir){case NORTH:if(M.i>0 && c[M.i-1][M.j]=='.')--M.i;elseM.dir = EAST;break;case EAST:if(M.j<9 && c[M.i][M.j+1]=='.')++M.j;elseM.dir = SOUTH;break;case SOUTH:if(M.i<9 && c[M.i+1][M.j]=='.')++M.i;elseM.dir = WEST;break;case WEST:if(M.j>0 && c[M.i][M.j-1]=='.')--M.j;elseM.dir = NORTH;break;}++T;}cout<<-1<<endl;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。