EMC筆試題(最后一道編程題)

quguiliang 14年前發布 | 2K 次閱讀

題目是這樣的:7*8的一個棋盤,即有56個格子。格子上隨機放上小球。小球只可以做水平或者垂直方向運動。
小球相互可以碰撞,碰撞的情況為:
如果兩個小球相鄰,比如Ball(1, 3)和Ball (1, 4),這時遠處的小球Ball(1, 1)移動過來撞到Ball(1, 3),Ball(1, 1)應該停止在(1, 2)位置,同時Ball(1, 3)把碰撞傳遞給Ball(1, 4)后,Ball(1,3)仍然不動, Ball(1, 4)被撞開,以此類推。



Ball(1, 1) => Ball(1, 3), Ball(1, 4)

如果一個方向上沒有其他的小球存在,那么不允許直接將小球沿著這個方向直接移出棋盤。

例如下圖中,G表示小球,那么(2,2)位置上的小球只能向右或向下移動,因為(2, 2)位置的小球的上方和左方都沒有小球,規則不允許把(2, 2)位置的小球沿上、左方移動從而直接移出棋盤。同理,(4, 2)位置的小球只允許向左移動。

### # # # #
#G # G # # #
# # #  # # # #
# G #  # # # #
# # #  # # # #
# # #  # # # #
# # #  # # # #
# # #  # # # #
兩個球相鄰是不能動的。中間一定要有至少一個的空格。
當碰撞過后,只有一個球在棋盤上為有解。否則無解。
每次選擇任意一個球開始運動,碰撞完成后,可以選擇任意剩下小球開始運動。
請寫出一個程序,任意初始化棋盤上的小球,然后判斷是否有解,有解打印出球移動步驟,否則輸入無解。

 本文由用戶 quguiliang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!