⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sudoku.c

📁 This is a program which solves simple and medium sudokus
💻 C
字号:
#include "stdio.h"
#include<conio.h>

/*
int Sudoku[9][9] = {
				{0,2,0,0,0,6,0,4,0},
				{5,0,0,0,8,1,0,7,0},
				{4,8,1,0,0,9,0,0,0},
				{9,0,0,8,0,0,0,1,4},
				{0,7,0,9,2,0,6,0,0},
				{8,4,0,6,0,7,0,3,9},
				{2,0,0,7,4,0,3,9,6},
				{0,0,4,3,0,0,1,2,0},
				{3,0,0,1,0,2,0,5,8}
				};

*/

/*

int Sudoku[9][9] = {
				{0,7,4,0,0,0,8,0,0},
				{1,0,0,0,7,5,0,0,6},
				{0,0,8,0,2,0,0,0,3},
				{5,3,0,0,0,1,6,0,0},
				{7,0,2,0,0,0,4,0,9},
				{0,0,6,7,0,0,0,3,5},
				{8,0,0,0,6,0,3,0,0},
				{3,0,0,9,4,0,0,0,2},
				{0,0,5,0,0,0,7,6,0}
				};
*/

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


/* Rowcheck,columncheck and boxcheck arrays */
int rckarr[10],cckarr[10],bckarr[10];
//int prevk;
//*/

/*           OR                */

/*
int sudoku[9][9];


get_sudoku()
{       int i,j;
       printf(" Enter the sudoku row-wise  \n");
      //  int i,j;

	for(i=0;i<9;i++)
	   for(j=0;j<9;j++)
	       scanf("%d",&sudoku[i][j]);
  return;
}
*/

disp_sudoku()
{  int i,j;
   for(i=0;i<9;i++)
       {   for(j=0;j<9;j++)
	       printf(" %d ",Sudoku[i][j]);
	   printf("\n\n");
	}
   return;
}

get_rckarr(a)
int a;
{ int m;

  for(m=1;m<=9;m++)
     rckarr[m] = 1;

  for(m=0;m<9;m++)
     {   if(Sudoku[a][m])
	    rckarr[(Sudoku[a][m])] = 0;
     }
  return;
}

get_cckarr(b)
int b;
{ int m;

  for(m=1;m<=9;m++)
    cckarr[m] = 1;

  for(m=0;m<9;m++)
     {   if(Sudoku[m][b])
	    cckarr[(Sudoku[m][b])] = 0;
     }
  return;
}

get_bckarr(a,b)
int a,b;
{

int a1,b1;

  for(a1=1;a1<=9;a1++)
     bckarr[a1] = 1;

  for(a1=a;a1<=a+2;a1++)
     {  for(b1=b;b1<=b+2;b1++)
	  { if(Sudoku[a1][b1])
	    bckarr[(Sudoku[a1][b1])] = 0;
	  }
     }
  return;
}


getnum()
{ int i,j;
 int k=0;
  for(i=0;i<9;i++)
    for(j=0;j<9;j++)
       {
	 if(Sudoku[i][j]==0)
	   k++;
       }
  return k;
}



int main()
{      int flag,ck;
       int i,j,x,i1,j1,k,prevk;
       clrscr();
  //   get_sudoku();
       printf("\t\t\t\tSu|do|ku\n\n\n");
       disp_sudoku();

  do{
       prevk = getnum();
       for(i=0;i<9;i++)
	{  for(j=0;j<9;j++)
	     { if(Sudoku[i][j]==0)
		 {  ck=0;
		    get_rckarr(i); /* Get the Rowcheck array */
		    get_cckarr(j); /* Get the Colcheck array */

		    if((i<3) && (j<3)) { i1=0;j1=0;}
		   else if((i<3) && (j>2) && (j<6)) { i1=0;j1=3;}
		   else if((i<3) && (j>5)) { i1=0;j1=6;}

		   else if((i>2) && (i<6) && (j<3)) { i1=3;j1=0;}
		   else if((i>2) && (i<6) && (j>2) && (j<6)) { i1=3;j1=3;}
		   else if((i>2) && (i<6) && (j>5)) { i1=3;j1=6;}

		   else if((i>5) && (j<3)) { i1=6;j1=0;}
		   else if((i>5) && (j>2) && (j<6)) { i1=6;j1=3;}
		   else { i1=6;j1=6;}
		    get_bckarr(i1,j1); /* Get the Boxcheck array */


		    for(x=1;x<=9;x++)
		       {  if((rckarr[x] ==1)&&(cckarr[x] ==1)&&(bckarr[x] ==1))
			  {ck++;
			   flag=x;
			   }
		       }
		    if(ck==1)
		    { Sudoku[i][j] = flag;
		      flag=0;}
		 }
	     }
	}
	    k = getnum();

    } while( k!=0 && k !=prevk);


	 /* To check Each Row for Single zero */
     do{
	 prevk = getnum();
	 for(i=0;i<9;i++)
	     { get_rckarr(i);
	       ck=0; flag=0;
	       for(x=1;x<=9;x++)
		 {  if(rckarr[x]==1)
		      { ck++;
			 flag = x;
		      }
		 }
		 if(ck==1)
		   { for(j=0;j<9;j++)
		       if(Sudoku[i][j]==0)
			 Sudoku[i][j]=flag;
		   }
	     }
	       k = getnum();

      } while( k!=0 && k !=prevk);


	 /* To check Each Column for Single zero */
      do{
	 prevk = getnum();
	 for(j=0;j<9;j++)
	     { get_cckarr(j);
	       ck=0; flag=0;
	       for(x=1;x<=9;x++)
		 {  if(cckarr[x]==1)
		      { ck++;
			 flag = x;
		      }
		 }
		 if(ck==1)
		   { for(i=0;i<9;i++)
		       if(Sudoku[i][j]==0)
			 Sudoku[i][j]=flag;
		   }
	     }
	       k = getnum();

	 } while( k!=0 && k !=prevk);


	printf("\n\nSolution\n\n\n");
	disp_sudoku();
	getch();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -