第19講 座標の工夫による魔方陣自動生成ソフトの高速化
第9話 乱数を使いセルに入れる数字の始まりを変えるには?
乱数を使う・・・ということは、第7話で述べておきましたが、
具体的にはどうしたらよいのでしょうか。
16以下の整数をランダムに発生させるには、
rand()%16
とすれば良いし、25以下なら
rand()%25
を使えば良いのです。
一般的にするためには、
rand()%(n*n)
としておけば良いですね。
rand()%(n*n)をつかって、始まりの数字を変えることができたとしても、
14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13
4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3
9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8
のように循環させないと、
あらゆる場合を網羅することになりません。
循環させるにはどうしたらよいのでしょうか。
ヒントは、rand()%(n*n)に隠されています。
コードの
long f(int **x,int n,long cn,int g){
int i,j,s,t,w,v;
s=g/n;
t=g%n;
for(i=1;i<n*n+1;i++){
x[s][t]=i;
の部分を工夫すれば良いのです。
他にも方法はあるかも知れませんが、
私は、
int ii,iii;
と変数を2つ用意して、
long f(int **x,int n,long cn,int g){
int i,j,s,t,w,v;
s=g/n;
t=g%n;
ii=rand()%(n*n);
for(iii=1;iii<n*n+1;iii++){
i=・・・;
x[s][t]=i;
としました。
皆さんの・・・部分を考えて下さい。
循環できるようにするには、どうしたらよいですか。