数独终局生成(3)

面向对象化程序

要做的工作
1.参数判别
2.生成并输出数独终局
(1)参数n;
(2)模板数独;
(3)衍生数独;
(4)创建衍生数独
(5)输出数独终局

考虑设计那些对象呢?
1.参数识别对象:ArgCheck
变量
(1)参数判别变量checkResualt
-----表明用户参数的合法与否,辨别用户想要做那种操作。
方法
(1)构造函数ArgCheck(int arc = 0, char** argv = NULL)构建对象
(2) check()函数;对参数的合法性以及参数进行判断,结果存入变量checkResualt
(3)getResualt();提供checkResualt
代码如下:

class ArgCheck{
	int argc;
	char** argv;
	int checkResult;//表明用户参数的合法与否,辨别用户想要做那种操作
public:
	//一些标志变量
	static const int INVALID = 0;//参数不合法
	static const int FORC = 1;//生成数独终局
	static const int FORS = 2;//求解数独
public:
	ArgCheck(int m_argc = 0, char** m_argv = NULL):checkResult(INVALID){
		argc = m_argc;
		argv = m_argv;
	}
	//提供checkResualt
	int getResult() {
		return checkResult;
	}
	//对参数的合法性以及参数进行判断,结果存入变量checkResualt并返回
	int check();
};

int check()实现如下:

//对参数的合法性以及参数进行判断,结果存入变量checkResualt并返回
int ArgCheck::check() {
	//申明
	bool isPurenumber(char* s);
	//验证传入参数的合法性
	if (argc != 3) {//数量
		cout << "参数数量过少或过多" << endl;
		return checkResult = INVALID;
	}
	if (strcmp("-c", argv[1]) != 0 && strcmp("-s", argv[1]) != 0)//-s和-c检查
	{
		cout << "请输入-c或-s" << endl;
		return checkResult = INVALID;
	}
	if (strcmp("-c", argv[1]) == 0) {//生成终局
		if (!isPurenumber(argv[2])) {//生成终局数必须为数字
			cout << "生成终局数必须为数字" << endl;
			return checkResult = INVALID;
		}
		return checkResult = FORC;
	}
	else {//求解数独
		return checkResult = FORS;
	}
}

//判断输入是否问纯数字
bool isPurenumber(char* s) {
	int n = strlen(s);
	for (int i = 0; i < n; i++)
		if (s[i] > '9' || s[i] < '0')
			return false;
	return true;
}

3数独生成对象SudokuFactory
功能描述:检查剩余需求量,生成新的数独。
声明代码

class SudokuFactory {
	static const int N = 9;
	int need;//剩余需求量
	int firstR[N];
	int model[N][N];//模板
	string sudokuStore;//保存终局
public:
	SudokuFactory(int m_need = 0 ) {
		need = m_need; 
		createFirstModel();//自动生成第一个模板
	}
	//  检查剩余需求量
	bool isEnough() {
		if (need > 0)return false;
		return true;
	}
	//生成第一个模板
	void createFirstModel();
	//更新模板
	void refreshModel();
	//在原始阵列基础上进行变换并输出36个排列
	void newFromModel();
	//生成终局文件
	string createSudokuFile();
	string getsudokuStore() { return sudokuStore; }
};

具体实现查看项目sudoko.cpp文件。
生成数独终局原型基本完成,进入优化阶段。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值