前ここで数独の質問をしたものなんですが
#include <stdio.h>
int map1[9][9];
/* m:Mondai */
/**int p[9][9]={{0,0,9,0,5,0,0,0,3},
{0,0,3,7,0,0,2,0,5},
{8,0,0,0,3,0,0,6,0},
{3,0,0,0,6,0,0,0,1},
{5,0,0,0,7,0,0,0,9},
{9,0,0,4,2,0,0,0,8},
{0,5,0,0,9,0,0,0,7},
{2,0,7,0,0,3,1,0,0},
{6,0,0,0,4,0,9,0,0}};
*/
int p[9][9]={{0,0,6,0,0,0,0,0,1},
{0,7,0,0,6,0,0,5,0},
{8,0,0,1,0,3,2,0,0},
{0,0,5,0,4,0,8,0,0},
{0,4,0,7,0,2,0,9,0},
{0,0,8,0,1,0,7,0,0},
{0,0,1,2,0,5,0,0,3},
{0,6,0,0,7,0,0,8,0},
{2,0,0,0,0,0,4,0,0}};
void disp()
{ int i,j;
//結果を表示//
for (i=0;i<9;i++){
for (j=0;j<9;j++){
printf("%2d",p[j]);
}
printf("\n");
}
}
void main(void)
{
int i,j,k;
int count_0,count_;
int x,y;
int r,s,t=3;
int a,b,c;
//map1のマスを0にし//
//正しい値の入る場所を作る//
START:
for (a=2;a<11;a++)
for (b=1;b<10;b++){
for (i=0;i<9;i++){
for (j=0;j<9;j++) map1[j]=0;
}
for (i=0;i<9;i++){
for (j=0;j<9;j++){
if (p[j] !=0) map1[j]=a;
if (p[j] ==b){ map1[j]=b;
for(k=0;k<9;k++){
if(map1[k][j] ==0) map1[k][j]=a;
if(map1[k] ==0) map1[k]=a;
}
}
}
}
//3*3のマスに0が一つと同じ数字が8つの場合0に正しい値を入れる//
for(x=0; x<3; x++){
for(y=0; y<3; y++){
r=x*3;
s=y*3;
count_0=0;
count_=0;
for(i=r; i<r+t; i++){
for(j=s; j<s+t; j++){
if( map1[j] == 0)
count_0 +=1;
else if( map1[j] == a )
count_ +=1;
}
}
if( (count_0 == 1) && (count_ == 8)){
for(i=r; i<r+t; i++){
for(j=s; j<s+t; j++){
if( map1[i][j] == 0){
p[i][j] = b;
if(count_0 != 0) goto START;
}
}
}
}
}}}
disp();
}
このプログラムでaに2bに1で一回りしてまた戻って次はaに3bに2と入れていきたいんですが このままだと
aに2bに1に2bに2がはいってしまうんです
説明下手ですみません いい方法はないでしょうか?