C语言生成一个随机的九行九列数独,一个随机生成数独的C++程序

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

//mySIZE是数独棋盘的边长,棋盘是mySIZE*mySIZE的大小

int mySIZE = 9;

void print(const vector> &num)

{

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

{

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

{

cout << num[i][j] << " ";

}

cout << endl;

}

}

bool IsRightPlace(vector> &num,int row,int col)

{

int n = num[row][col];

//注意i < row

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

{

if (num[i][col] == n)

return false;

}

//注意i < col

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

{

if (num[row][i] == n)

return false;

}

int row_start = row / 3;

row_start *= 3;

int row_end = row_start + 2;

int col_start = col / 3;

col_start *= 3;

int col_end = col_start + 2;

int i = row_start,j = col_start;

//注意 k <= 8

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

{

if (row != i || col != j)

{

if (num[i][j] == n)

return false;

}

else

break;

if (j == col_end)

{

//注意j = col_start !不要搞错换行时列的起始点!

j = col_start;

i = i + 1;

}

else

{

j = j + 1;

}

}

return true;

}

bool generate_core(vector> &num,int col)

{

vector number;

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

number.emplace_back(i);

while (!number.empty())

{

int randindex = rand() % number.size();

int randnum = number[randindex];

number.erase(number.begin() + randindex);

num[row][col] = randnum;

if (IsRightPlace(num,row,col) == false)

continue;

if (row == mySIZE - 1 && col == mySIZE-1)

{

return true;

}

int nextrow,nextcol;

if (col == mySIZE-1)

{

nextrow=row + 1;

nextcol = 0;

}

else

{

nextrow = row;

nextcol = col + 1;

}

bool next = generate_core(num,nextrow,nextcol);

if (next)

return true;

}

if (number.empty())

{

num[row][col] = -5;

return false;

}

}

void generate()

{

vector> num(mySIZE,vector(mySIZE,-1));

srand((unsigned)time(NULL));

if( generate_core(num,0) )

print(num);

}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

以上是编程之家为你收集整理的一个随机生成数独的C++程序全部内容,希望文章能够帮你解决一个随机生成数独的C++程序所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值