[ create a new paste ] login | about

Link: http://codepad.org/Eq3XbR54    [ raw code | output | fork ]

ahox - C, pasted on Sep 15:
#include <stdio.h>

int main(void){
	int i,j,k,x,y;
	int count0,count1;
	int a[9][9] = {
		{5,3,0,0,7,0,0,0,0},
		{6,0,0,1,9,5,0,0,0},
		{0,9,8,0,0,0,0,6,0},
		{8,0,0,0,6,0,0,0,3},
		{4,0,0,8,0,3,0,0,1},
		{7,0,0,0,2,0,0,0,6},
		{0,6,0,0,0,0,2,8,0},
		{0,0,0,4,1,9,0,0,5},
		{0,0,0,0,8,0,0,7,9}};
	int b[9];
	count0 = 0;
	for(i=0;i<9;i++){
		for(j=0;j<9;j++){
			count0 += a[i][j]?0:1;
		}
	}
	for(i=0;i<9;i++){
		for(j=0;j<9;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	while(count0>0){
		for(i=0;i<9;i++){
			for(j=0;j<9;j++){
				if(a[i][j]) continue;
				for(k=0;k<9;k++){
					b[k]=1;
				}
				for(x=(i/3)*3;x<(i/3+1)*3;x++){
					for(y=(j/3)*3;y<(j/3+1)*3;y++){
						if(a[x][y]){
							b[a[x][y]-1]=0;
						}
					}
				}
				for(k=0;k<9;k++){
					if(a[i][k]){
						b[a[i][k]-1]=0;
					}
					if(a[k][j]){
						b[a[k][j]-1]=0;
					}
				}
				count1=0;
				for(k=0;k<9;k++){
					count1 += b[k]?1:0;
				}
				if(count1==1){
					for(k=0;k<9;k++){
						if(b[k]){
							a[i][j]=k+1;
							count0--;
							goto NEXTLOOP;
						}
					}
				}
			}
		}
NEXTLOOP:
		printf("(%d,%d)=%d\n",i+1,j+1,k+1);
	}
	for(i=0;i<9;i++){
		for(j=0;j<9;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}


Output:
5 3 0 0 7 0 0 0 0 
6 0 0 1 9 5 0 0 0 
0 9 8 0 0 0 0 6 0 
8 0 0 0 6 0 0 0 3 
4 0 0 8 0 3 0 0 1 
7 0 0 0 2 0 0 0 6 
0 6 0 0 0 0 2 8 0 
0 0 0 4 1 9 0 0 5 
0 0 0 0 8 0 0 7 9 
(5,5)=5
(5,2)=2
(5,8)=9
(5,3)=6
(5,7)=7
(6,4)=9
(4,4)=7
(7,5)=3
(3,5)=4
(3,6)=2
(1,4)=6
(1,6)=8
(3,1)=1
(3,4)=3
(3,7)=5
(3,9)=7
(4,7)=4
(4,6)=1
(4,2)=5
(4,3)=9
(4,8)=2
(6,2)=1
(6,3)=3
(6,6)=4
(6,7)=8
(2,7)=3
(2,8)=4
(1,8)=1
(1,7)=9
(1,9)=2
(1,3)=4
(2,2)=7
(2,3)=2
(2,9)=8
(6,8)=5
(7,1)=9
(7,4)=5
(7,6)=7
(7,3)=1
(7,9)=4
(8,2)=8
(8,3)=7
(8,7)=6
(8,8)=3
(8,1)=2
(9,1)=3
(9,2)=4
(9,3)=5
(9,4)=2
(9,6)=6
(9,7)=1
5 3 4 6 7 8 9 1 2 
6 7 2 1 9 5 3 4 8 
1 9 8 3 4 2 5 6 7 
8 5 9 7 6 1 4 2 3 
4 2 6 8 5 3 7 9 1 
7 1 3 9 2 4 8 5 6 
9 6 1 5 3 7 2 8 4 
2 8 7 4 1 9 6 3 5 
3 4 5 2 8 6 1 7 9 


Create a new paste based on this one


Comments: