C言語——解数独プログラム[ソースコード]

1510 ワード

C言語で書かれた解数独のプログラム.linuxでテストが正常に実行されました.
効果は図のようになります.
これは解付き数独で,記入する部分は数字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; }