Tom and Jerry
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 257 测试通过 : 103
比赛描述
Tom和Jerry在10*10的方格中:
……..
……*…
……..
……….
…*.C….
…..…
…*……
..M……*
….….
..……
C=Tom(猫)
M=Jerry(老鼠)
*=障碍物
.=空地
他们各自每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。注意,“对穿”是不算相遇的。
他们移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。
输入
10行,格式如上
输出
相遇时间T。如果无解,输出-1。
样例输入
……..
……*…
……..
……….
…*.C….
…..…
…*……
..M……*
….….
..……
样例输出
49
题目来源
wwm
题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1058
解题思路:
简单的深搜,因为Tom和Jerry的旋转方向是规定的,因此不用考虑最短时间的问题,dfs传递了7个参数,前四个分别代表Tom和Jerry的当前位置坐标,接着分别是Tom和Jerry的当前方向,最后一个是时间。当能走下一步时方向不改变,不能走时方向改变,只有时间是每进入一层+1的。关键是访问过的情况标记,我用了四位数组,只有当Tom和Jerry的位置和方向全部相同是才标记。
代码如下: