過不了的重點:
1.直線如果跟橫線交錯的話->等到要拆除時會不小心拆到另一條線
例:(線 = 1, 樁 = 9, 空 = 0, 邊界 = -1)
-1 | -1 | -1 | -1 | -1 | -1 |
-1 | 0 | 9 | 0 | 0 | -1 |
-1 | 9 | 1(改2) | 1 | 9 | -1 |
-1 | 0 | 1 | 0 | 0 | -1 |
-1 | 0 | 9 | 0 | 0 | -1 |
-1 | -1 | -1 | -1 | -1 | -1 |
所以交錯的地方需要用累加的(改成1+1),這樣拆除的時候就不會拆到另外一條
2.如果要建造木樁處已經有線,則需要「先」拆除經過此處的線,「再」建造木樁
這個沒有想到的話真的很難處理,因為你無法得知線的走向(有可能同時兩段線平行且相鄰,這時候沒辦法得知究竟要消除哪裡)
也就是除了add()和remove()外需要再多一個remove_line()
例:(re = remove)
-1 | 略 | -1 | ||||
9 | ||||||
9 | 1 | 9 | ||||
9 | 1 | 1(re) | 1 | 9 | ||
-1 | -1 |
然後我就想到,如果遇到「如果要建造木樁處已經有線」這種狀況
那不如先把要建造處的線變成木樁,接著remove(),然後再add(),就順利解決這兩個問題了^__^
完整程式碼:https://github.com/gpsftuEbsl/zerojudge-cpp-program-answers/blob/aa9d8ee9d82724a6da05fb8c945f97b9fcb8833d/g596.cpp
裡面還有一些小技巧
過不了的重點:
1.直線如果跟橫線交錯的話->等到要拆除時會不小心拆到另一條線
例:(線 = 1, 樁 = 9, 空 = 0, 邊界 = -1)
-1 -1 -1 -1 -1 -1 -1 0 9 0 0 -1 -1 9 1(改2) 1 9 -1 -1 0 1 0 0 -1 -1 0 9 0 0 -1 -1 -1 -1 -1 -1 -1 所以交錯的地方需要用累加的(改成1+1),這樣拆除的時候就不會拆到另外一條
2.如果要建造木樁處已經有線,則需要「先」拆除經過此處的線,「再」建造木樁
這個沒有想到的話真的很難處理,因為你無法得知線的走向(有可能同時兩段線平行且相鄰,這時候沒辦法得知究竟要消除哪裡)
也就是除了add()和remove()外需要再多一個remove_line()
例:(re = remove)
-1 略 -1 9 9 1 9 9 1 1(re) 1 9 -1 -1 然後我就想到,如果遇到「如果要建造木樁處已經有線」這種狀況
那不如先把要建造處的線變成木樁,接著remove(),然後再add(),就順利解決這兩個問題了^__^
完整程式碼:https://github.com/gpsftuEbsl/zerojudge-cpp-program-answers/blob/aa9d8ee9d82724a6da05fb8c945f97b9fcb8833d/g596.cpp
裡面還有一些小技巧
補充1.
for(k = 0; k < 4; k++){
i = r+(k-1)%2;
j = c+(k-2)%2;
}
這樣寫可以檢查上下左右
補充2.
我用-1把陣列圍起來,檢查出界的時候比較方便
過不了的重點:
1.直線如果跟橫線交錯的話->等到要拆除時會不小心拆到另一條線
例:(線 = 1, 樁 = 9, 空 = 0, 邊界 = -1)
-1 -1 -1 -1 -1 -1 -1 0 9 0 0 -1 -1 9 1(改2) 1 9 -1 -1 0 1 0 0 -1 -1 0 9 0 0 -1 -1 -1 -1 -1 -1 -1 所以交錯的地方需要用累加的(改成1+1),這樣拆除的時候就不會拆到另外一條
2.如果要建造木樁處已經有線,則需要「先」拆除經過此處的線,「再」建造木樁
這個沒有想到的話真的很難處理,因為你無法得知線的走向(有可能同時兩段線平行且相鄰,這時候沒辦法得知究竟要消除哪裡)
也就是除了add()和remove()外需要再多一個remove_line()
例:(re = remove)
-1 略 -1 9 9 1 9 9 1 1(re) 1 9 -1 -1 然後我就想到,如果遇到「如果要建造木樁處已經有線」這種狀況
那不如先把要建造處的線變成木樁,接著remove(),然後再add(),就順利解決這兩個問題了^__^
完整程式碼:https://github.com/gpsftuEbsl/zerojudge-cpp-program-answers/blob/aa9d8ee9d82724a6da05fb8c945f97b9fcb8833d/g596.cpp
裡面還有一些小技巧
補充1.
for(k = 0; k < 4; k++){
i = r+(k-1)%2;
j = c+(k-2)%2;
}
這樣寫可以檢查上下左右
補充2.
我用-1把陣列圍起來,檢查出界的時候比較方便
感謝其他解題報告!!!
建議搭配服用