解数读:递归意外的终止

 写一个自动求解数独的程序,回溯法。递归调用的时候提前终止了

代码如下:

#include<iostream>
#include<fstream>
using namespace std;

//数独
struct SuDoku {
	char question[9][9];    //储存原始数独题
	char key[9][9];

};

struct Point {
	int x;
	int y;
};

class Finsudoku {

public:
	Finsudoku(int flags);        //构造,从文件中获取数独题,需要填的空用0表示
	void GetSudoku_enter();
	void Print() ;                
	char GetAnswer(Point point, char str);

	bool Iskey(int row, int col, char str);  //判断某一位置为某一值是否可行
	void Findvalue(int row,int col);         //求解

private:
	SuDoku sudoku;
};



bool Finsudoku::Iskey(int row, int col, char str) {

	int m = row / 3;
	int n = col / 3;
	for (int i = 0; i < 9; i++) {
		if (sudoku.question[i][col] == str )return false;
		if (sudoku.question[row][i] == str)return false;
	}
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			if (sudoku.question[m * 3 + i][n * 3 + j] == str)return false;
		}
	}
	return true;


}


//递归求解
 void Finsudoku::Findvalue(int row = 0, int col = 0)
{
	 //cout << "row " << row << "  " << "col " << col << endl;  测试用
	if (col == 9 && row == 8) { 
		//cout << "满" << endl;  
		Print();
		return ; }
	if (col == 9) { col = 0, row++;  }
	if (sudoku.question[row][col] == '0') {
		for (int i = 1; i <= 9; i++) {
			char temp = i + '0';
			if (Iskey(row, col, temp)) {
				sudoku.question[row][col] = temp;
				Findvalue(row, col + 1);
			}
			else sudoku.question[row][col] = '0';
			
		}
	}else Findvalue(row, col+1);

}
#include<iostream>
#include<fstream>
#include"sudoku.h"



using namespace std;




int main()
{
	Finsudoku test1(1);
	test1.Print();
	test1.Findvalue();
	test1.Print();
}

 

求大佬帮忙解惑

递归调用停止一般是传递的参数不正确,或者程序符号递归停止条件

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

 也许对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
 

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y