004-數獨問題

題目:

數獨問題:9*9的矩陣,要求每一行,每一列,每個九宮格都是1-9這九個數字且不能重複。

給定一9*9矩陣,裏面有部分數空缺,要求找出滿足上述要求的一個矩陣。

 代碼:代碼中的二維數組用來存放數獨中的數字,沒有數字的位置爲0。

#include<stdio.h>
#define N 9

int ar[N][N]={8,0,0,0,0,0,0,0,0,
0,0,3,6,0,0,0,0,0,
0,7,0,0,9,0,2,0,0,
0,5,0,0,0,7,0,0,0,
0,0,0,0,4,5,7,0,0,
0,0,0,1,0,0,0,3,0,
0,0,1,0,0,0,0,6,8,
0,0,8,5,0,0,0,1,0,
0,9,0,0,0,0,4,0,0
};

bool ok(int t){
	int a=t/9;
	int b=t%9;
	int newx=a/3*3;
    int newy=b/3*3;
	for(int i=newx;i<newx+3;i++){
        for(int j=newy;j<newy+3;j++){
			if(i!=a && ar[i][j]==ar[a][b] && j!=b)
				return false;
		}
	}
	for(i=0;i<N;i++)
		if(i!=b && ar[a][i]==ar[a][b])
			return false;
	for(i=0;i<N;i++)
		if(i!=a && ar[i][b]==ar[a][b])
			return false;
	return true;
}

void traceback(int t){
	if(t==81){
		for(int i=0;i<N;i++){
            for(int j=0;j<N;j++)
                printf("%d ",ar[i][j]);
			printf("\n");
		}
		return;
	}
	int a=t/9;
	int b=t%9;
	if(ar[a][b]==0){
		for(int i=1;i<10;i++){
			ar[a][b]=i;
			if(ok(t)==1)
				traceback(t+1);
			ar[a][b]=0;
		}
	}
	else
		traceback(t+1);
}

int main()
{
	traceback(0);
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章