11.一般(素数・奇数・偶数)的プログラム=すべての魔方陣を作成するプログラム例
 
 ここでも理論的には、表題の通りであるが実際には10方陣あたりが限界である。改良して14方陣ぐらいまでできるようにしたいと考えている。このプログラムはスピード優先で、1つの部品で足りるところを、少しずつ変えてたくさんの部品にしている。どの魔方陣しても同一構造なので本来1つの部品(関数)で足りるところを、方陣ごとに少しずつ変えてあるためほとんど同じ構造の関数がたくさん並んでいる。非芸術的であることは重々わかっているが、スピード優先のためやむを得ざることだと了解していただきたい。また、すぐにコンパイルしていただくため(7.4の累乗の奇数倍方陣を作成するプログラム例)のときと同様にインデントはとっていない。7ときと同様に、インデントをご自分でとっていただければ幸いである。
 
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 100
#define MAH 14
#define KRK 100
#define KR 30
char tane3z(register int g,char n);
char tane5z(register int g,char n);
char tane7z(register int g,char n);
char tane6z(register int g,char n);
char tane10z(register int g,char n);
char tane8z(register int g,char n);
char tane4z(register int g,char n);
char tane3(register int g,char n);
char tane5(register int g,char n);
char tane7(register int g,char n);
char tane6(register int g,char n);
char tane10(register int g,char n);
char tane8(register int g,char n);
char tane4(register int g,char n);
void gousei(char s,char t,char n);
void seisou(char n);
void seisoux(char d,char n);
unsigned long int kai=0;
char hairetu[MAH][MAH];
char knt[MAH],knt2[MAH];
char *x;
char gmax;
unsigned long int kn=0;
void main()
{
char n,m;
char ii,i;
int j;
 
x=malloc(2*MAH*MAH);
clrscr();
gotoxy(1,1);
printf("何方陣について検索しますか?");
scanf("%d",&n);
seisoux(1,n);
  seisoux(0,n);
seisou(n);
switch(n){
case 3: tane3z(0,n);
break;
case 4: tane4z(0,n);
break;
case 5: tane5z(0,n);
break;
case 6: tane6z(0,n);
break;
case 7: tane7z(0,n);
break;
case 8: for(i=0;i<n;i++){
*(x+i*MAH+i)=i+1;
/*
gotoxy(2*i+1,2+i);
printf("%d",*(x+i*MAH+i));
*/
}
tane8z(n,n);
break;
case 10: for(i=0;i<n;i++){
*(x+i*MAH+i)=i+1;
          /*
gotoxy(3*i+1,2+i);
printf("%3d",*(x+i*MAH+i));
*/
}
tane10z(n,n);
break;
}
gotoxy(5,23);
printf("  何かキーを入力してください。");
getchar();
getchar();
}
 
 
void gousei(char s,char t,char n)
{
static char y[MAH][MAH];
register int i,j;
register int k,l;
register int ken=1,ii,ij,ik,kk,kk2;
register int wa;
 
for(i=0;i<n;i++){
for(j=0;j<n;j++){
y[i][j]=*(x+i*MAH+j+s*MAH*MAH)+n*(*(x+i*MAH+j+t*MAH*MAH)-1);
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<=i;k++)
for(l=0;l<n;l++){
if((k==i) && (l==j))break;
if(y[i][j]==y[k][l]){
ken=0;
goto end;
}
}
end:
for(i=0;i<n;i++){
wa=0;
for(j=0;j<n;j++)
wa=wa+y[j][i];
if(wa!=n*(n*n+1)/2){
ken=0;
break;
}
}
for(i=0;i<n;i++){
wa=0;
for(j=0;j<n;j++)
wa=wa+y[i][j];
if(wa!=n*(n*n+1)/2){
ken=0;
break;
}
}
if(ken==1){
wa=0;
for(i=0;i<n;i++)
wa=wa+y[i][i];
if(wa!=n*(n*n+1)/2)
ken=0;
}
if(ken==1){
wa=0;
for(i=0;i<n;i++)
wa=wa+y[i][n-i-1];
if(wa!=n*(n*n+1)/2)
ken=0;
}
if(ken==1){
if(n<5)
kk=15;
else if(n<7)
kk=12;
else
kk=6;
if(n<7)
kk2=3;
else
kk2=2;
ii=kai%kk;
kai++;
gotoxy(65,23);
printf("個数=%ld",kai);
for(i=0;i<n;i++)
for(j=0;j<n;j++){
ik=ii/kk2;
ij=ii%kk2;
gotoxy(3*j+1+(n+1)*ik*3,i+2+(n+1)*ij);
printf("%2d",y[i][j]);
}
}
}
 
void seisou(char n)
{
char i,j;
 
for(i=0;i<n;i++)
for(j=0;j<n;j++)
hairetu[i][j]=0;
}
 
void seisoux(char d,char n)
{
char i,j;
 
for(i=0;i<n;i++)
for(j=0;j<n;j++)
*(x+i*MAH+j+MAH*MAH*d)=0;
}
 
char tane3z(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,wa;
 
if(g<n){
i=g;
j=g;
}
else if(g<2*n-1){
i=g-n;
j=n-i-1;
if(i>=j){
i++;
j--;
}
}
else if(g<3*n-3){
i=0;
j=1;
}
else if(g<4*n-5){
j=0;
i=1;
}
else if(g<5*n-7){
i=1;
j=2;
}
else {
j=1;
i=2;
}
k=1;
while(k<n+1){
h=1;
*(x+i*MAH+j)=k;
/*
gotoxy(2*j+1,2+i);
printf("%d",*(x+i*MAH+j));
    */
knt[k-1]++;
if(knt[k-1]>=n+1)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==1 && i==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==1 && j==2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==1 && i==2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1)
if(g+1<n*n){
kaesu=tane3z(g+1,n);
}
else{
kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
tane3(0,n);
seisou(n);
        seisoux(1,n);
}
knt[k-1]--;
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
return(kaesu);
}
 
char tane5z(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,wa,kk,kkk;
 
if(g<n){
i=g;
j=g;
}
else if(g<2*n-1){
i=g-n;
j=n-i-1;
if(i>=j){
i++;
j--;
}
}
else if(g<3*n-3){
i=0;
j=g-8;
}
else if(g<4*n-5){
j=0;
i=g-11;
}
else if(g<5*n-8){
i=1;
j=g-13;
if(j>=n-i-1)
j++;
}
else if(g<6*n-11){
j=1;
i=g-15;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-16;
}
else if(g<8*n-17){
j=2;
i=g-18;
}
else if(g<9*n-21){
i=3;
j=4;
}
else{
i=4;
j=3;
}
 
k=1;  kk=random(n);
while(k<n+1){
h=1;
kkk=(kk+k-1)%n+1;
*(x+i*MAH+j)=kkk;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j));
*/
knt[kkk-1]++;
if(knt[kkk-1]>=n+1)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==0 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1)
if(g+1<n*n){
kaesu=tane5z(g+1,n);
}
else{
kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
tane5(0,n);
seisou(n);
        seisoux(1,n);
}
knt[kkk-1]--;
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
return(kaesu);
}
 
 
char tane7z(register int g,char n)
{
register int i,j,k,l;
char h,kaesu=0,wa,kk,kkk;
 
if(g<n){
i=g;
j=g;
}
else if(g<2*n-1){
i=g-n;
j=n-i-1;
if(i>=j){
i++;
j--;
}
}
else if(g<3*n-3){
i=0;
j=g-12;
}
else if(g<4*n-5){
j=0;
i=g-17;
}
else if(g<5*n-8){
i=1;
j=g-21;
if(j>=n-i-1)
j++;
}
else if(g<6*n-11){
j=1;
i=g-25;
if(i>=n-j-1)
i++;
}
else if(g<7*n-15){
i=2;
j=g-28;
if(j>=n-i-1)
j++;
}
else if(g<8*n-19){
j=2;
i=g-31;
if(i>=n-j-1)
i++;
}
else if(g<9*n-23){
i=3;
j=g-33;
}
else if(g<10*n-27){
j=3;
i=g-36;
}
else if(g<11*n-32){
i=4;
j=g-38;
}
else if(g<12*n-37){
j=4;
i=g-40;
}
else if(g<13*n-43){
j=6;
i=5;
}
else{
i=6;
j=5;
}
 
k=1; kk=random(n);
while(k<n+1){
h=1;
kkk=(kk+k-1)%n+1;
*(x+i*MAH+j)=kkk;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j));
*/
knt[kkk-1]++;
if(knt[kkk-1]>=n+1)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==0 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1)
if(g+1<n*n){
kaesu=tane7z(g+1,n);
/*
if(kaesu==0)if(i==j)break;
*/
}
else{
kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
tane7(0,n);
seisou(n);
seisoux(1,n);
}
knt[kkk-1]--;
k++;
 
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
return(kaesu);
}
 
 
char tane10z(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,w1,w2,ii,wa,kk,kkk;
 
/*
if(g>n*n-6){
gotoxy(50,22);
printf("gの残り=%d",99-g);
}
  */
if(g<n){
i=g;
j=g;
}
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-27;
}
else if(g<5*n-7){
i=1;
j=g-34;
if(j>=n-i-1)
j++;
}
else if(g<6*n-10){
j=1;
i=g-41;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-47;
if(j>=n-i-1)
j++;
}
else if(g<8*n-18){
j=2;
i=g-53;
if(i>=n-j-1)
i++;
}
else if(g<9*n-23){
i=3;
j=g-58;
if(j>=n-i-1)
j++;
}
else if(g<10*n-28){
j=3;
i=g-63;
if(i>=n-j-1)
i++;
}
else if(g<11*n-34){
i=4;
j=g-66;
 
}
else if(g<12*n-40){
j=4;
i=g-70;
}
else if(g<13*n-46){
i=5;
j=g-74;
}
else if(g<14*n-52){
j=5;
i=g-78;
}
else if(g<15*n-59){
i=6;
j=g-81;
}
else if(g<16*n-66){
j=6;
i=g-84;
}
else if(g<17*n-74){
i=7;
j=g-86;
}
else if(g<18*n-82){
j=7;
i=g-88;
}
else if(g<19*n-91){
i=8;
j=9;
}
else if(g<20*n-100){
j=8;
i=9;
}
k=1; kk=random(n);
while(k<n+1){
kkk=(kk+k-1)%n+1;
if(kkk==i+1 && k<n){
k++;
kkk=(kk+k-1)%n+1;
}
if(kkk==i+1 && k==n)break;
if(kkk==j+1 && k<n){
k++;
kkk=(kk+k-1)%n+1;
}
if(kkk==j+1 && k==n)break;
h=1;
*(x+i*MAH+j)=kkk;
/*
gotoxy(2*j+1,2+i);
printf("%d",*(x+i*MAH+j));
*/
if(i==n-j-1)
for(l=0;l<i;l++){
if(*(x+i*MAH+n-i-1)==*(x+l*MAH+n-1-l)){
h=0;
break;
}
}
if(h==1)
if(i>j && *(x+i*MAH+j)==*(x+i*MAH+i))h=0;
if(h==1)
if(i<j && *(x+i*MAH+j)==*(x+j*MAH+j))h=0;
if(h==1)
if(j<n-i-1 && *(x+i*MAH+j)==*(x+i*MAH+n-i-1))h=0;
if(h==1)
if(j<n-i-1 && *(x+i*MAH+j)==*(x+(n-j-1)*MAH+j))h=0;
if(h==1)
for(l=0;l<i;l++){
if(*(x+i*MAH+j)==*(x+l*MAH+j)){
h=0;
break;
}
}
if(h==1)
for(l=0;l<j;l++){
if(*(x+i*MAH+j)==*(x+i*MAH+l)){
h=0;
break;
}
}
 
if(h==1)
if(g+1<n*n){
gmax=0;
kaesu=tane10z(g+1,n);
}
else{
kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
seisou(n);
seisoux(1,n);
tane10(0,n);
}
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
return(kaesu);
 
}
 
char tane8z(register int g,char n)
{
register int ii,i,j,k,l,h,kaesu=0,kk,kkk;
 
if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else{
i=(g-2*n)/(n-2);
j=(g-2*n)%(n-2);
if(i<n-i-1){
if(j>=i)
j++;
if(j>=n-i-1)
j++;
}
if(n-i-1<i){
if(j>=n-i-1)
j++;
if(j>=i)
j++;
}
}
k=1; kk=random(n);
while(k<n+1){
kkk=(kk+k-1)%n+1;
if(kkk==i+1 && k<n){
k++;
kkk=(kk+k-1)%n+1;
}
if(kkk==i+1 && k==n)break;
if(kkk==j+1 && k<n){
k++;
kkk=(kk+k-1)%n+1;
}
if(kkk==j+1 && k==n)break;
h=1;
*(x+i*MAH+j)=kkk;
/*
gotoxy(2*j+1,2+i);
printf("%d",*(x+i*MAH+j));
*/
if(i==n-j-1)
for(l=0;l<i;l++){
if(*(x+i*MAH+n-i-1)==*(x+l*MAH+n-1-l)){
h=0;
break;
}
}
if(h==1)
if(i>j && *(x+i*MAH+j)==*(x+i*MAH+i))h=0;
if(h==1)
if(i<j && *(x+i*MAH+j)==*(x+j*MAH+j))h=0;
if(h==1)
if(j<n-i-1 && *(x+i*MAH+j)==*(x+i*MAH+n-i-1))h=0;
if(h==1)
if(j<n-i-1 && *(x+i*MAH+j)==*(x+(n-j-1)*MAH+j))h=0;
if(h==1)
for(l=0;l<i;l++){
if(*(x+i*MAH+j)==*(x+l*MAH+j)){
h=0;
break;
}
}
if(h==1)
for(l=0;l<j;l++){
if(*(x+i*MAH+j)==*(x+i*MAH+l)){
h=0;
break;
}
}
if(h==1)
if(g+1<n*n){
gmax=0;
kaesu=tane8z(g+1,n);
}
else{
        kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
seisou(n);
seisoux(1,n);
tane8(0,n);
}
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
return(kaesu);
}
 
 
 
char tane6z(register int g,char n)
{
register int ii,i,j,k,l,h,kaesu=0,wa,kk,kkk;
 
if(g<n){
i=g;
j=g;
  }
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-15;
}
else if(g<5*n-7){
i=1;
j=g-18;
if(j>=n-i-1)
j++;
}
else if(g<6*n-10){
j=1;
i=g-21;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-22;
}
else if(g<8*n-18){
j=2;
i=g-24;
}
else if(g<9*n-22){
i=3;
j=g-26;
}
else if(g<10*n-26){
j=3;
i=g-28;
}
else if(g<11*n-31){
j=5;
i=4;
}
else if(g<12*n-36){
i=5;
j=4;
}
k=1; kk=random(n);
while(k<n+1){
h=1;
kkk=(kk+k-1)%n+1;
*(x+i*MAH+j)=kkk;
/*
gotoxy(2*j+1,2+i);
printf("%d",*(x+i*MAH+j));
*/
knt[kkk-1]++;
if(knt[kkk-1]>n)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane6z(g+1,n);
}
else{
kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
seisou(n);
seisoux(1,n);
tane6(0,n);
}
knt[kkk-1]--;
k++;
}
 
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
return(kaesu);
}
 
 
 
char tane4z(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,w1,w2,ii,wa;
 
if(g<n){
i=g;
j=g;
  }
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-9;
}
else if(g<5*n-7){
i=1;
j=3;
}
else if(g<6*n-10){
j=1;
i=3;
}
else if(g<7*n-13){
i=2;
j=3;
}
else {
j=2;
i=3;
}
 
k=1;
while(k<n+1){
h=1;
*(x+i*MAH+j)=k;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j));
*/
knt[k-1]++;
if(knt[k-1]>n)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1)
if(g+1<n*n){
kaesu=tane4z(g+1,n);
}
else{
kn++;
gotoxy(50,23);
printf("種数=%ld",kn);
tane4(0,n);
seisou(n);
seisoux(1,n);
}
knt[k-1]--;
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j)=0;
 
return(kaesu);
}
 
char tane3(register int g,char n)
{
char i,j,k,l,h,kaesu=0,w1,w2,m,wa;
 
if(g<n){
i=g;
j=g;
}
else if(g<2*n-1){
i=g-n;
j=n-i-1;
if(i>=j){
i++;
j--;
}
}
else if(g<3*n-3){
i=0;
j=1;
}
else if(g<4*n-5){
j=0;
i=1;
}
else if(g<5*n-7){
i=1;
j=2;
}
else {
j=1;
i=2;
}
 
k=1;
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
w2=k-1;
*(x+i*MAH+j+MAH*MAH)=k;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j+MAH*MAH));
    */
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==0 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane3(g+1,n);
}
else{
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 k++;
}
if(h==0)
k++;
 
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
char tane5(register int g,char n)
{
char i,j,k,l,h,kaesu=0,w1,w2,m,wa;
 
m=n/2;
if(g<n){
i=g;
j=g;
}
else if(g<2*n-1){
i=g-n;
j=n-i-1;
if(i>=j){
i++;
j--;
}
}
else if(g<3*n-3){
i=0;
j=g-8;
}
else if(g<4*n-5){
j=0;
i=g-11;
}
else if(g<5*n-8){
i=1;
j=g-13;
if(j>=n-i-1)
j++;
}
else if(g<6*n-11){
j=1;
i=g-15;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-16;
}
else if(g<8*n-17){
j=2;
i=g-18;
}
else if(g<9*n-21){
i=3;
j=4;
}
else{
i=4;
j=3;
}
 
k=1;
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
w2=k-1;
*(x+i*MAH+j+MAH*MAH)=k;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j+MAH*MAH));
    */
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==0 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane5(g+1,n);
}
else{
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 k++;
}
if(h==0)
k++;
 
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
 
char tane7(register int g,char n)
{
register int i,j,k,l;
char h,kaesu=0,w1,w2,m,wa;
 
m=n/2;
if(g<n){
i=g;
j=g;
}
else if(g<2*n-1){
i=g-n;
j=n-i-1;
if(i>=j){
i++;
j--;
}
}
else if(g<3*n-3){
i=0;
j=g-12;
}
else if(g<4*n-5){
j=0;
i=g-17;
}
else if(g<5*n-8){
i=1;
j=g-21;
if(j>=n-i-1)
j++;
}
else if(g<6*n-11){
j=1;
i=g-25;
if(i>=n-j-1)
i++;
}
else if(g<7*n-15){
i=2;
j=g-28;
if(j>=n-i-1)
j++;
}
else if(g<8*n-19){
j=2;
i=g-31;
if(i>=n-j-1)
i++;
}
else if(g<9*n-23){
i=3;
j=g-33;
}
else if(g<10*n-27){
j=3;
i=g-36;
}
else if(g<11*n-32){
i=4;
j=g-38;
}
else if(g<12*n-37){
j=4;
i=g-40;
}
else if(g<13*n-43){
j=6;
i=5;
}
else{
i=6;
j=5;
}
 
k=1;
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
w2=k-1;
*(x+i*MAH+j+MAH*MAH)=k;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j+MAH*MAH));
*/
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==0 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
 
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else{
h=0;
}
}
if(h==1)
if(g+1<n*n){
kaesu=tane7(g+1,n);
/*
if(kaesu==0)if(i==j)break;
*/
}
else{
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 k++;
}
if(h==0)
k++;
 
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
 
char tane10(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,w1,w2,ii,wa,kk,kkk;
 
if(gmax<g){
gmax=g;
gotoxy(50,22);
printf("gの残り=%3d",99-g);
}
if(g<n){
i=g;
j=g;
}
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-27;
}
else if(g<5*n-7){
i=1;
j=g-34;
if(j>=n-i-1)
j++;
}
else if(g<6*n-10){
j=1;
i=g-41;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-47;
if(j>=n-i-1)
j++;
}
else if(g<8*n-18){
j=2;
i=g-53;
if(i>=n-j-1)
i++;
}
else if(g<9*n-23){
i=3;
j=g-58;
if(j>=n-i-1)
j++;
}
else if(g<10*n-28){
j=3;
i=g-63;
if(i>=n-j-1)
i++;
}
else if(g<11*n-34){
i=4;
j=g-66;
 
}
else if(g<12*n-40){
j=4;
i=g-70;
}
else if(g<13*n-46){
i=5;
j=g-74;
}
else if(g<14*n-52){
j=5;
i=g-78;
}
else if(g<15*n-59){
i=6;
j=g-81;
}
else if(g<16*n-66){
j=6;
i=g-84;
}
else if(g<17*n-74){
i=7;
j=g-86;
}
else if(g<18*n-82){
j=7;
i=g-88;
}
else if(g<19*n-91){
i=8;
j=9;
}
else if(g<20*n-100){
j=8;
i=9;
}
 
k=1; kk=random(n);
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
kkk=(kk+k-1)%n+1;
w2=kkk-1;
*(x+i*MAH+j+MAH*MAH)=kkk;
/*
gotoxy(3*j+1,3+n+i);
printf("%2d",*(x+i*MAH+j+MAH*MAH));
*/
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane10(g+1,n);
}
else{
gmax=0;
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 k++;
}
if(h==0)
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
char tane8(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,w1,w2,ii,wa,kk,kkk;
 
if(gmax<g){
gmax=g;
gotoxy(50,22);
printf("gの残り=%3d",63-g);
}
if(g<n){
i=g;
j=g;
}
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-21;
}
else if(g<5*n-7){
i=1;
j=g-26;
if(j>=n-i-1)
j++;
}
else if(g<6*n-10){
j=1;
i=g-31;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-35;
if(j>=n-i-1)
j++;
}
else if(g<8*n-18){
j=2;
i=g-39;
if(i>=n-j-1)
i++;
}
else if(g<9*n-23){
i=3;
j=g-42;
if(j>=n-i-1)
j++;
}
else if(g<10*n-28){
j=3;
i=g-45;
if(i>=n-j-1)
i++;
}
else if(g<11*n-33){
i=4;
j=g-47;
 
}
else if(g<12*n-38){
j=4;
i=g-50;
}
else if(g<13*n-44){
i=5;
j=g-52;
}
else if(g<14*n-50){
j=5;
i=g-54;
}
else if(g<15*n-57){
i=6;
j=7;
}
else {
j=6;
i=7;
}
k=1;  kk=random(n);
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
kkk=(kk+k-1)%n+1;
w2=kkk-1;
*(x+i*MAH+j+MAH*MAH)=kkk;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j+MAH*MAH));
*/
knt2[kkk-1]++;
if(knt2[kkk-1]>=n+1)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
 
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane8(g+1,n);
}
else{
gmax=0;
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 knt2[kkk-1]--;
 k++;
}
if(h==0){
knt2[kkk-1]--;
k++;
}
}
 
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
char tane6(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,w1,w2,ii,wa,kk,kkk;
 
if(g<n){
i=g;
j=g;
  }
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-15;
}
else if(g<5*n-7){
i=1;
j=g-18;
if(j>=n-i-1)
j++;
}
else if(g<6*n-10){
j=1;
i=g-21;
if(i>=n-j-1)
i++;
}
else if(g<7*n-14){
i=2;
j=g-22;
}
else if(g<8*n-18){
j=2;
i=g-24;
}
else if(g<9*n-22){
i=3;
j=g-26;
}
else if(g<10*n-26){
j=3;
i=g-28;
}
else if(g<11*n-31){
j=5;
i=4;
}
else if(g<12*n-36){
i=5;
j=4;
}
k=1;  kk=random(n);
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
kkk=(kk+k-1)%n+1;
w2=kkk-1;
*(x+i*MAH+j+MAH*MAH)=kkk;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j+MAH*MAH));
    */
knt2[kkk-1]++;
if(knt2[kkk-1]>=n+1)
h=0;
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane6(g+1,n);
}
else{
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 knt2[kkk-1]--;
 k++;
}
if(h==0){
knt2[kkk-1]--;
k++;
}
}
 
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
 
char tane4(register int g,char n)
{
register int i,j,k,l,h,kaesu=0,w1,w2,ii,wa;
 
if(g<n){
i=g;
j=g;
  }
else if(g<2*n){
i=g-n;
j=2*n-g-1;
}
else if(g<3*n-2){
i=0;
j=g-2*n+1;
}
else if(g<4*n-4){
j=0;
i=g-9;
}
else if(g<5*n-7){
i=1;
j=3;
}
else if(g<6*n-10){
j=1;
i=3;
}
else if(g<7*n-13){
i=2;
j=3;
}
else {
j=2;
i=3;
}
 
k=1;
w1=*(x+i*MAH+j)-1;
while(k<n+1){
h=1;
w2=k-1;
*(x+i*MAH+j+MAH*MAH)=k;
/*
gotoxy(2*j+1,3+i+n);
printf("%d",*(x+i*MAH+j+MAH*MAH));
*/
if(i==n-1 && j==n-1){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+n-l-1+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-2 && j==0){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && j==n-1 && g>2*n){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
if(h==1 && i==0 && j==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+i*MAH+l+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1 && j==n-1 && i==n-2){
wa=0;
for(l=0;l<n;l++)
wa=wa+*(x+l*MAH+j+MAH*MAH);
if(wa!=n*(n+1)/2)
h=0;
}
 
if(h==1){
if(hairetu[w1][w2]==0){
hairetu[w1][w2]=1;
}
else
h=0;
}
if(h==1)
if(g+1<n*n){
kaesu=tane4(g+1,n);
}
else{
gousei(0,1,n);
}
if(h==1)
if(kaesu==1){
h=0;
hairetu[w1][w2]=0;
}
else{
 hairetu[w1][w2]=0;
 k++;
}
if(h==0)
k++;
}
if(h==1)
kaesu=0;
else
kaesu=1;
*(x+i*MAH+j+MAH*MAH)=0;
return(kaesu);
}
 
 


 

戻る
 


 
                             
                     
                    


 

進む
 


 
                             
                     
                    


 

目次へ
 


 

魔方陣新HPへ
魔方陣トップへ数学研究室へ

パワーポイント講義へ

小中学生のための魔方陣授業


上にメニューが示されてない場合は、下のロゴ右脳数学(直観数学)またはURLをクッリク!


http://www5b.biglobe.ne.jp/~suugaku/