当前位置:>澳门新葡京官网>正文

c言语题目-数独-寻求父亲神物说皓题目意思和剖

2018-11-26 来源:[db:来源] 责任编辑:[db:作者] 点击:

分享到:

  #include

  int result=0; //结次数

  int main()

  {

  int a[9][9];

  void Sudoku(int a[9][9],int n);

  printf("请输入数独中的原始数据,没拥有胸中拥有数据的用0顶替。\n");

  for(int i=0;i<9;i++)

  {

  printf("请输入第%d行的9个数:",i+1);

  for(int j=0;j<9;j++)

  scanf("%d",&a[i][j]);

  }

  printf("数独的松为:\n\n");

  Sudoku(a,0);

  if(result==0)

  printf("此数独无松!");

  return 0;

  }

  //输入却行的松

  void print(int a[9][9])

  {

  result++;

  printf("第%d个堵法为:\n",result);

  for(int i=0;i<9;i++)

  {

  for(int j=0;j<9;j++)

  {

  printf("%d ",a[i][j]);

  if((j==2)||(j==5))

  printf(" ");

  }

  printf("\n");

  if((i==2)||(i==5))

  printf("\n");

  }

  printf("\n");

  }

  //判佩能否却以将第i行、第j列的数设为k

  bool check(int a[9][9],int i,int j,int k)

  {

  int m,n;

  //判佩行

  for(n=0;n<9;n++)

  {

  if(a[i][n] == k)

  return false;

  }

  //判佩列

  for(m=0;m<9;m++)

  {

  if(a[m][j] == k)

  return false;

  }

  //判佩所在小九宫格

  int t1=(i/3)*3,t2=(j/3)*3;

  for(m=t1;m

  {

  for(n=t2;n

  {

  if(a[m][n] == k)

  return false;

  }

  }

  //却行,前往true

  return true;

  }

  //数独寻求松函数

  void Sudoku(int a[9][9],int n)

  {

  int temp[9][9];

  int i,j;

  for(i=0;i<9;i++)

  {

  for(j=0;j<9;j++)

  temp[i][j]=a[i][j];

  }

  i=n/9; j=n%9; //寻求出产第n个数的行数和列数

  if(a[i][j] != 0) //曾经拥有原始数据

  {

  if(n == 80) //是最末壹个格儿子,输入却行松

  print(temp);

  else //不是最末壹个格儿子,寻求下壹个格儿子

  Sudoku(temp,n+1);

  }

  else //没拥有胸中拥有数据

  {

  for(int k=1;k<=9;k++)

  {

  bool flag=check(temp,i,j,k);

  if(flag) //第i行、第j列却以是k

  {

推荐阅读
Copyright © 2002-2011 澳门新葡京 版权所有 Power by DedeCms