讀完題目最初的想法是使用for循環(huán)模擬方塊下落,
在此之前,要對方塊數(shù)據(jù)進行處理:最下方全0行清除掉
在下落到當前行時判斷是否有方塊(即當前格子的數(shù)據(jù)為1),然后預(yù)判方塊會不會發(fā)生碰撞,以及何時碰撞(再下落幾格會碰撞)?;蛘卟粫l(fā)生碰撞,直接下落到底。
實現(xiàn)起來比較復(fù)雜,能通過大部分樣例(90分)
但是有一部分樣例是無法通過的,他們的共性就是在同一行中,從左至右,如果左邊首先預(yù)判會在下落兩個后發(fā)生碰撞,就會結(jié)束判斷,然后宣布找到碰撞值并開始合并。哪怕右邊在此時已經(jīng)發(fā)生了碰撞,也會被忽略掉。
具體的出問題例程:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 1 1
0 0 0 1
0 0 0 1
0 0 0 0
1
正確輸出應(yīng)該是:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
在研究了滿分算法后,得到啟發(fā):
標準方塊固定為4個,可以先將4個方塊的坐標值存儲起來,然后模擬下落,每一行只判斷四個方塊是否會發(fā)生碰撞,依然是只要出現(xiàn)一個發(fā)生碰撞,就宣布找到落點,并且合并數(shù)據(jù)(區(qū)別是不進行預(yù)判是否將要碰撞)。