1、简介
这是一个失败的生成九宫格数独的代码,希望自己以后有空的时候优化
2、实现
#include "stdio.h"
#define false 0
#define true 1
char buf[9][9] =
{
{1,},
{2,},
{3,},
{4,},
{5,},
{6,},
{7,},
{8,},
{9,}
};
char numindex[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
};
char check_num(int x,int y)
{
int xline = -1;
int yline = -1;
int numberindex = -1;
//遍历x坐标上下9个数
for (int i = 0; i < 9; i++)
{
if (buf[x][y] == buf[x][i])
{
if (y == i)
continue;
return false;
}
}
//遍历y坐标上下9个数
for (int i = 0; i < 9; i++)
{
if (buf[x][y] == buf[i][y])
{
if (x == i)
continue;
return false;
}
}
//本格内进行遍历
//先定位在9宫格的位置1-9
xline = x % 3;
yline = y % 3;
numberindex = numindex[xline][yline];
//printf("numberindex %d\r\n", numberindex);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (buf[x][y] == buf[x - xline + i][y - yline + j])
{
if (x == (x - xline + i) && y == (y - yline + j))
continue;
return false;
}
}
}
return true;
}
int main()
{
int j = 0;
int number = -1;
int x = 0;
int y = 0;
int e = 0;
int r = 0;
for (x = 0; x < 9;x++)
{
for (y = 0; y < 9; y++)
{
//给每个数据填值
for (int k = 1; k < 10;k++)
{
buf[x][y] = k;
number = check_num(x, y);
if (number == true)
break;
}
}
y = 0;
}
for ( r = 0; r < 9; r++)
{
for ( e = 0; e < 9; e++)
{
printf("%d ",buf[r][e]);
}
printf("\r\n");
e = 0;
}
printf("\r\n");
getchar();
return 0;
}