第19講 座標の工夫による魔方陣自動生成ソフトの高速化

第10話 改良魔方陣自動生成ソフトに乱数を組み込む

答えは(iii+ii)%(n*n)+1です。
long f(int *k,int **x,int n,long cn,int g,int *p,int *q){
   int i,j,s,t,w,v;
   s=q[g];
   t=p[g];
   int ii,iii;
   ii=rand()%(n*n);
   for(iii=1;iii<n*n+1;iii++){
     i=(iii+ii)%(n*n)+1;

     x[s][t]=i;

とすることによって、iの発生順番が変わり循環します。
例えば、n=4かつii=9のときでトレースしてみましょう。
iii=1のとき、
 i=(iii+ii)%(n*n)+1=(1+9)%(4×4)+1=10%16+1=10+1=11
iii=2のとき、
 i=(iii+ii)%(n*n)+1=(2+9)%(4×4)+1=11%16+1=11+1=12
iii=3のとき、
 i=(iii+ii)%(n*n)+1=(3+9)%(4×4)+1=12%16+1=12+1=13
iii=4のとき、
 i=(iii+ii)%(n*n)+1=(4+9)%(4×4)+1=13%16+1=13+1=14
iii=5のとき、
 i=(iii+ii)%(n*n)+1=(5+9)%(4×4)+1=14%16+1=14+1=15
iii=6のとき、
 i=(iii+ii)%(n*n)+1=(6+9)%(4×4)+1=15%16+1=15+1=16
iii=7のとき、
 i=(iii+ii)%(n*n)+1=(7+9)%(4×4)+1=16%16+1=0+1=1
iii=8のとき、
 i=(iii+ii)%(n*n)+1=(8+9)%(4×4)+1=17%16+1=1+1=2
iii=9のとき、
 i=(iii+ii)%(n*n)+1=(9+9)%(4×4)+1=18%16+1=2+1=3
iii=10のとき、
 i=(iii+ii)%(n*n)+1=(10+9)%(4×4)+1=19%16+1=3+1=4
iii=11のとき、
 i=(iii+ii)%(n*n)+1=(11+9)%(4×4)+1=20%16+1=4+1=5

iii=12のとき、
 i=(iii+ii)%(n*n)+1=(12+9)%(4×4)+1=21%16+1=5+1=6
iii=13のとき、
 i=(iii+ii)%(n*n)+1=(13+9)%(4×4)+1=22%16+1=6+1=7
iii=14のとき、
 i=(iii+ii)%(n*n)+1=(14+9)%(4×4)+1=23%16+1=7+1=8
iii=15のとき、
 i=(iii+ii)%(n*n)+1=(15+9)%(4×4)+1=24%16+1=8+1=9
iii=16のとき、
 i=(iii+ii)%(n*n)+1=(16+9)%(4×4)+1=25%16+1=9+1=10

どうです。
11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10
と見事に巡回していますよね。
皆さんは、他の数字でもトレースしてみましょう。
どの数字でも、5次魔方陣でも6次魔方陣でも、
循環しますよ。


これでかなり速くなるだろと・・・
実験すると?!


第9話へ 第11話へ

a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ