个人项目问题设计

一、面向对象设计

用例图

简单的用例图如下
用例图

类图

在本次项目中我一共使用了两个类
在这里插入图片描述

状态图

以下分别是求生成独终局和求解数独的状态图
在这里插入图片描述

二、代码设计

函数关系图

函数关系图

部分代码

以下是生成数独终局部分的代码

void Sudoku::create(int row,int col)
{
	//当现在生成的数独终局个数等于要求生成的数独终局个数时,返回
	if (this->now_num == this->out_num)
	{
  		return;
 	}
 	//生成一个终局
 	if(row==8&&col==9)
 	{
 		//将数独终局导出到要输出的数组中,等待输出到文件
 		this->IntoOutSu();
 		//已生成数独终局数加一
 		this->now_num++;
 		return;
 	}
 	//换行
 	if(row!=8&&col==9)
 	{
 		row++;
 		col=0;
 	}
 	//计算当前行、列、对应的九宫格数
 	int blo=((row/3)*3)+(col/3);
 	for(int x=1;x<=9;x++)
 	{
 		//数字x将要填充的行、列、九宫格中都还不存在数字x
 		if ((this->rowmark[row][x] != 1) && (this->colmark[col][x] != 1) && (this->blockmark[blo][x] != 1))
 		{
 			//将x填入数独
 			this->su[row][col] = x;
 			//标记行、列、九宫格已经存在数字x
 			SetMark(row, col, x, 1);
 			//列数+1递归调用函数
 			this->create(row, col + 1);
 			//标记行、列、九宫格不存在数字x
 			//保证回溯后状态也恢复
 			SetMark(row, col, x, 0);
 		}
 	}
 	//数字x从1到9在当前位置都不合适,先暂时把当前位置填入数字0
 	this->su[row][col] = 0;
}

求解数独终局部分代码与此处相似,需要跳过不为0的数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值