Re: [問題] 判斷相同符號的演算法

作者: pziyout (pziyout)   2019-04-18 11:42:11
※ 引述《leo52127 (龍...)》之銘言:
: 假設 5*5 25格 每格都有一個1~8數字(隨機)
: 想請問如果我想判斷這25格中
: 有沒有相同的數字連在一起(6個以上連在一起)
: 然後輸出結果
: 舉例:
: 1 1 2 3 2
: 2 1 5 6 7
: 4 1 6 2 8
: 1 1 1 7 8
: 1 3 4 5 5
: 輸出: 1 8連
: 2 3 3 5 8
: 2 4 3 3 3
: 2 2 1 3 7
: 2 2 2 4 4
: 2 1 7 7 5
: 輸出: 2 8連 3 6連
: 想了好幾天了,都想不出來...
: 拜託版上的大大幫幫小弟
簡單的遞迴問題,用 python 寫程式都滿簡短的,
以下為在 nxn 的方陣先用亂數填入 [a,b] 範圍數字,然後使用
遞迴函式檢查相連同數字位置,將位置存起來,位置的個數就是相連的數量。
import random
# (i,j) 是否在 [0,n-1]x[0,n-1] 之間
def valid( n , i , j ) :
return True if ( 0 <= i < n and 0 <= j < n ) else False
# 檢查 (i,j) 是否為數字 num,若是記錄位置並繼續其餘為走過位置尋找相同數字
def forward( num , i , j , visited ) :
global lands
if lands[i][j] == num :
visited.add( (i,j) )
if valid( n , i+1 , j ) :
if (i+1,j) not in visited : forward(num,i+1,j,visited)
if valid( n , i-1 , j ) :
if (i-1,j) not in visited : forward(num,i-1,j,visited)
if valid( n , i , j+1 ) :
if (i,j+1) not in visited : forward(num,i,j+1,visited)
if valid( n , i , j-1 ) :
if (i,j-1) not in visited : forward(num,i,j-1,visited)
a , b = 1 , 5
n = 10
lands = [ [ random.randint(a,b) for i in range(n) ] for j in range(n) ]
# 檢查所有數字
for num in range(a,b+1) :
print( num , end=":\n" )
total , loc_visiteds = [] , []
for i in range(n) :
for j in range(n) :
# 跳過已走過的相連位置
if (i,j) in loc_visiteds : continue
visited = set()
forward(num,i,j,visited)
if len(visited) > 1 :
loc_visiteds += [ p for p in visited ]
print( " {} 連:".format( len(visited) ) +
" , ".join( [ "[{},{}]".format(p[0],p[1])
for p in sorted(visited) ] ) )
total += [ len(visited) ]
print( " 最大相連個數:" , max(total) , "連" , end="\n\n" )
for r in lands :
print( " ".join( [ str(v) for v in r ] ) )
作者: stfang925 (司馬鈴薯)   2019-04-18 11:49:00
作者: wavek (狗貓貓 m(OvO)m)   2019-04-18 12:32:00
作者: chaotic0307 (堅持、耐心、努力學習)   2019-04-18 17:32:00
作者: TitanEric (泰坦)   2019-04-18 21:00:00
1. valid那裡可以直接回傳 不用再if else2. 四個方位那裡寫成一個array 然後for loop跑過 會比較好
作者: germun (ger)   2019-04-19 02:45:00
小矩陣像這樣用遞迴就夠了, 大矩陣用遞迴可能會爆
作者: lemon651 (小明)   2019-04-19 09:34:00
valid寫在最上面不就行了嗎
作者: thefattiger (LT)   2019-04-19 22:01:00
為何耀挑這種小瑕疵...又不是production code
作者: HenryLiKing (HenryLiKing)   2019-04-20 13:31:00
同意樓上 原PO厲害!!

Links booklink

Contact Us: admin [ a t ] ucptt.com