|
「数学」小旅行 |
|
#50057 #50058
私の以前の #50045 の総当たり方式では n=6 の場合、丸一日やっても出ませんでした。 計算中はパソコンの動きがあまりにも鈍くて我慢できず中断してしまいました。 そこで、一マスずつ順番に縦横を見ながら埋めていく方式に変更して、次のようにしました。Ruby再帰です。 n=5で、0.15秒、n=6で、79.81秒、n=7で、いま計算中です。結果は後ほど。.. $n=7 #ここをn=4,n=5,n=6,,,とするだけでいいです。 $cn=0 a=Array.new() $r=Array.new() 1.step($n){|i|a<<i} $r<<a 2.step($n){|i|$r<<Array.new($n,0)} def c(e,f) if f==$n then e+=1;f=0 end if e>=$n then $cn+=1 else 1.step($n){|s| if !($r[e].include?(s) or $r.transpose[f].include?(s)) then $r[e][f]=s c(e,f+1) end } $r[e][f]=0 end end t1=Time.now c(1,0);1.step($n){|i|$cn*=i};p $cn t2=Time.now p t2-t1 |
|
1月25日(月) 8:49:54
50059 |