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;
}