函数的递归失败

时间:2017-10-08 07:32:16

标签: function recursion

我正在使用回溯的数独求解器。对于一些我不知道的原因,我的代码块不能使用递归。我的意思是,即使程序到达我写入递归的代码行,函数也不会调用自身。程序就像没有任何东西一样继续。

#include <bits/stdc++.h>

using namespace std;

ifstream in("data.in");
ofstream out("data.out");

int sudoku[10][10];
int f[10];
vector< pair<int, int> > v;

bool continuare(int pas){

    int x = v[pas].first;
    int y = v[pas].second;

    for(int i = x; i <= 9; i++)
        f[ sudoku[i][y] ]++;
    for(int i = x - 1; i >= 1; i--)
        f[ sudoku[i][y] ]++;
    for(int j = x + 1; j <= 9; j++)
        f[ sudoku[x][j] ]++;
    for(int j = x - 1; j >= 1; j--)
        f[ sudoku[x][j] ]++;

    for( int i = x - 3 + x%3, c1 = 0; c1 < 3; c1++, i++ )
        for( int j = y - 3 + y%3, c2 = 0; c2 < 3; c2++, j++ )
            f[ sudoku[i][j] ]++;

    for(int i = 1; i <= 9; i++){
        if( f[i] > 3 )
            return false;
        f[i] = 0;
    }

    return true;
}

void afisare(){

    for(int i = 1; i <= 9; i++){
        for(int j = 1; j <= 9; j++)
            out<<sudoku[i][j]<<" ";
        out<<"\n";
    }

}

void backtracking( int pas ){

    if( pas > v.size() )
        afisare();
    else
        for(int i = 1; i <= 9; i++){
            sudoku[ v[pas].first ][ v[pas].second ] = i;
            if( continuare(pas) )
                backtracking( pas + 1 );
        }

}

int main()
{
    for(int i = 1; i <= 9; i++)
        for(int j = 1; j <= 9; j++){
            in>>sudoku[i][j];
            if(sudoku[i][j] == 0)
                v.push_back( make_pair(i, j) );
        }

    backtracking(1);

    return 0;
}

正如您可能已经注意到的那样,问题是当回溯()调用自身时,我说没有任何事情发生。

1 个答案:

答案 0 :(得分:0)

从似乎已解决了您的问题的评论中复制:

  

使用-g标记进行编译并针对gdb运行您的可执行文件,我只是这样做,并看到它在f[ sudoku[i][j] ]++;函数中的continuare处出现了错误。