台灣最大程式設計社群網站
線上人數
514
 
會員總數:243462
討論主題:188180
歡迎您免費加入會員
討論區列表 >> C/C++ >> 判斷有無中空問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
判斷有無中空問題
價值 : 50 QP  點閱數:249 回應數:7

樓主

kd35
門外漢
0 1
12 2
發送站內信

大家好 最近寫程式遇到一個問題,不知道發這裡合不合適
我的問題是這樣
我一開始會先創立一個M*M的矩陣,右邊界跟下邊界固定只能填1,其他區域利用亂數判斷格子內填0或填1
而我不希望產生出來的結果1會被0分開 例如:
1 0 0 0 1
0 1 1 0 1
0 0 0 1 1
0 0 0 0 1
1 1 1 1 1
或者
1 1 0 0 1
1 1 0 1 1
1 0 0 0 1
0 0 0 0 1
1 1 1 1 1
的情形,如果說要避免這種情況,條件也怎麼設定會比較好? 還是有別種產生矩陣的方式都可以分享?可以大概講一下想法就好..因為我比較常用MATLAB

搜尋相關Tags的文章: [ 判斷中空 ] ,
本篇文章發表於2018-04-20 12:01
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
那你希望怎樣的?

只要中間0的都不行嗎?


本篇文章回覆於2018-04-20 13:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

kd35
檢舉此回應
應該是說 只要1四周都被0隔開的情況就要剃除
本篇文章回覆於2018-04-20 13:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
只能想到用在距陣中一個一個的比了
假設是 6 * 6 (0~5,0~5)

for row=1 to 4
for COl= 1 to 4
if m(row,col)=0 then continue
if m(row-1,col)=0 andalso m(row+1,col)=0 andalso m(row,col-1)=0 andalso m(Row,col+1)=0 then
msgbox(" 1 被包圍了")
end if
next
next

還沒有完,只有作中間的。因為你沒有講上左如何才是被隔開的。
本篇文章回覆於2018-04-21 07:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

淺水員
檢舉此回應
3樓的算法應該只能判斷單1格被0包圍的狀況
如果是連續區塊的1外面包1圈0應該沒法判斷得出來

這其實不限定是matlab的題目
比較像是演算法相關
可以考慮用廣度優先搜索(BFS)去判斷
本篇文章回覆於2018-04-21 13:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

小魚
檢舉此回應
1.四周都被0隔開
四周是 上下左右 還是 八個方向

2.就要剃除
剃除是什麼意思

還是不知道你要什麼?
這東西讓我想到踩地雷...
本篇文章回覆於2018-04-21 15:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

kd35
檢舉此回應
非常謝謝樓上大大的熱心回應
確實三樓大大的判斷式只能判斷單一個1被0包圍的情況
如果1有連在一起且被0包圍就會失效
我最後是用迷宮演算法做判斷
不過有些情況好像還是會誤判就是了....但是已經能替除大部分我不要的情形了
p.s我這邊的包圍指的是八個方位
本篇文章回覆於2018-05-26 13:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

淺水員
檢舉此回應
我的作法是這樣
如果原本是矩陣 A ,維度為 M*N
接著從 A 的右下角開始找連續的 1
將這些 1 改為 -1
最後檢查是否還有 1 的格子
有的話就是被孤立的區塊
處理好的之後再把那些 -1 改回 1
本篇文章回覆於2018-05-26 14:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.