C言語——解数独プログラム[ソースコード]
1510 ワード
C言語で書かれた解数独のプログラム.linuxでテストが正常に実行されました.
効果は図のようになります.
これは解付き数独で,記入する部分は数字0で代用する.
これはプログラム実行後の効果図です.ほら、数独はもう终わった~~~
プログラムのソースコードは以下の通りです.
効果は図のようになります.
これは解付き数独で,記入する部分は数字0で代用する.
これはプログラム実行後の効果図です.ほら、数独はもう终わった~~~
プログラムのソースコードは以下の通りです.
#include
#include
#define SIZE 9
#define get_low_bit(x) ((~x&(x-1))+1)
struct{
int left;
char num;
char try;
}board[SIZE][SIZE];
int bit2num(int bit)
{
switch(bit){
case 1:case 2:
return bit;
case 4:
return 3;
case 8:
return 4;
case 16:
return 5;
case 32:
return 6;
case 64:
return 7;
case 128:
return 8;
case 256:
return 9;
}
}
void printf_res()
{
int i, j, k;
for(i=0; i 0)
printf("\033[0;31m%2d\033[0m", board[i][j].num);
else
printf("%2d", board[i][j].try);
}
printf("|
");
}
for(i=0; i 0)
sub(i, j, 1< 0)
sub(i, j, 1< 0)
solve(pos+1);
else
for(left=board[i][j].left; left; left&=(left-1))
{
bit = get_low_bit(left);
sub(i, j, bit);
board[i][j].try = bit2num(bit);
solve(pos+1);
add(i, j, bit);
board[i][j].try=0;
init();
}
}
int main()
{
int i, j, c;
for(i=0; i'9')
;
board[i][j].num = c-'0';
board[i][j].try = 0;
board[i][j].left = 0x0001FF;
}
init();
solve(0);
return 0;
}