我在我的代码函数中用3D std :: vector替换了一个3D数组,它正在进入一个无限循环。你能给我一个提示,我真的需要使用一个向量而不是一个数组。谢谢:)
我的初始代码是:
//arr is a 3D array of a sudoku table,the 3 rd dimension is for keeping values 0 to 13
//for a cell, and when I assign values I start from index 1 to 12
bool sol(int arr[12][12][13]) {
int row,col;
if(!find_empty(arr,row,col)) return true;
for(int i=1;i< 12;i++) { //for digits 1 to 12
if(is_working(arr,row,col,arr[row][col][i]) ) { //if i can put the value in a cell
arr[row][col][0] = arr[row][col][i]; //replace the first element for a cell with that value
//here I want to use vector because I want to use an ac3 algorithm
//and remove those values that not satisfy constraints and shrink domain size having less values to verify with backtrack
if(sol(arr)) return true;
arr[row][col][0] = 0;
}
}
return false;//if not backtrack
}
我将 arr 替换为:
std::vector<std::vector<std::vector<int> > > vec;
vec.resize(12);
for(int i=0;i<12;i++)
{
vec[i].resize(12);
for(int j=0;j<12;j++)
{
vec[i][j].resize(13);
for(int k=0;k<13;k++)
vec[i][j][k]=table[i][j][k];
}
}
bool sol(std::vector<std::vector<std::vector<int> > >& vec) {
int row,col;
if(!find_empty(vec,row,col)) return true;
for(int i=1;i< vec[row][col].size();i++) {//for remainig values in domain
if(is_working(vec,row,col,vec[row][col][i]) ) {//same as above but having less values to verify for
vec[row][col][0] = vec[row][col][i];
if(sol(vec)) return true;
vec[row][col][0] = 0;
}
}
return false;
}
现在它正在进入一个无限循环!初始代码没有错误,这是一个简单的回溯。我用 vec 替换 arr 后出现问题。你能不能给出关于如何用3D矢量替换3D arr 的一些建议
答案 0 :(得分:1)
你的问题不够明确。如果您还可以发布is_working和find_empty的代码,那么我们将能够看到您如何获取行和列的值。 我会把它作为一个评论,但作为一个新成员,没有足够的声誉,我必须把它作为一个答案。一旦你分享了is_working()和find_empty()
的代码,我就会编辑它答案 1 :(得分:1)
我已经解决了这个问题。我使用了向量矩阵而不是3D向量,它运行得很好:D