C語言實現9宮格數獨

1、簡介

這是一個失敗的生成九宮格數獨的代碼,希望自己以後有空的時候優化

 

2、實現

#include "stdio.h"

#define false 0
#define true 1

char buf[9][9] = 
{
 {1,},
 {2,},
 {3,},
 {4,},
 {5,},
 {6,},
 {7,},
 {8,},
 {9,}
};

char numindex[3][3] = {

 {1,2,3},
 {4,5,6},
 {7,8,9}
};

char check_num(int x,int y)
{
 int xline = -1;
 int yline = -1;
 int numberindex = -1;

//遍歷x座標上下9個數
 for (int i = 0; i < 9; i++)
 {
  if (buf[x][y] == buf[x][i])
  {
   if (y == i) 
    continue;
   return false;
  }
 }

//遍歷y座標上下9個數
 for (int i = 0; i < 9; i++)
 {
  if (buf[x][y] == buf[i][y])
  {
   if (x == i) 
    continue;
   return false;
  }
 }

//本格內進行遍歷
 //先定位在9宮格的位置1-9
 xline = x % 3;
 yline = y % 3;

 numberindex = numindex[xline][yline];
 //printf("numberindex %d\r\n", numberindex);

 for (int i = 0; i < 3; i++)
 {
  for (int j = 0; j < 3; j++)
  {
   if (buf[x][y] == buf[x - xline + i][y - yline + j])
   {
    if (x == (x - xline + i) && y == (y - yline + j))
     continue;
    return false;
   }
  }
 }

 return true;
}


int main()
{
 int j = 0;
 int number = -1;
 int x = 0;
 int y = 0;
 int e = 0;
 int r = 0;

 for (x = 0; x < 9;x++)
 {
  for (y = 0; y < 9; y++)
  {
   //給每個數據填值
   for (int k = 1; k < 10;k++)
   {
    buf[x][y] = k;
    number = check_num(x, y);

    if (number == true)
     break;
   }
  }
  y = 0;
 }
 
 for ( r = 0; r < 9; r++)
 {
  for ( e = 0; e < 9; e++)
  {
   printf("%d ",buf[r][e]);
  }
  printf("\r\n");
  e = 0;
 }
 printf("\r\n");
 getchar();

 return 0;
}

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