河内塔上的分段故障(磁盘未在第一个钉中启动)

时间:2018-10-27 01:21:05

标签: c++ segmentation-fault stack towers-of-hanoi

对于(可能是)显而易见的问题,我很抱歉,但是我正在起步,希望得到帮助。我尝试了类似问题的解决方案,但没有结果。 我必须制作“河内之塔”算法,但在此算法中,磁盘可以在不同的钉中启动。例如,这是一些可能的输入“ 2 1 0:3:4”,这意味着第一个桩上有3个磁盘,第二个和第三个桩上有1个磁盘; “:1:”,“ 2::1”,等等。 因此,我将其输入:

int main(int argc, char *argv[])
{
    stack<int> beg;
    stack<int> aux;
    stack<int> end;
    int stack_pos = 1;

    for (size_t i = 1; i < (unsigned)argc; i++) {
        cout << "holi" << endl;
        if(stack_pos == 1){
            if (*argv[i] == ':'){
                  stack_pos=2;
                  continue;
             }
            else if(isdigit(*argv[i])){
                //char* temp = argv[i];
                //beg.push(atoi(temp));
                beg.push(atoi(argv[i]));
                continue;
            }
            else{
                cout << "You can't have less than 1 disk, try again." << endl;
            }
        }
        if(stack_pos == 2){
            if (*argv[i] == ':'){
                  stack_pos=3;
                  continue;
             }
            else if(isdigit(*argv[i])){
                char* temp = argv[i];
                aux.push(atoi(temp));
                continue;
            }
        }
        if(stack_pos == 3){
            if(isdigit(*argv[i])){
                char* temp = argv[i];
                end.push(atoi(temp));
                continue;
            } else{
                cout << "You can't have more than 3 stacks,try again." << endl;
                break;
            }
        }

    }

    print_stack(beg);
    print_stack(aux);
    print_stack(end);

    int n = beg.size() + aux.size()  + end.size();
    //cout << n;

    move(n, beg, aux, end);

    return 0;
}

基本上遍历列表,直到找到“:”,然后继续填充下一个堆栈,直到下一个“:”为止。 我的move()函数:

void move(int n, stack<int> beg, stack<int> aux, stack<int> end){
    if(n==1){
        cout<<"\t\tMoved disc "<<  end.top() <<" from _ to _ \n";
    }else{

        move(n-1, beg, end, aux);
        move(1, beg, aux, end);
        move(n-1, aux, beg, end);
    }
    return;
}

问题出在我将单个磁盘放在第一个或第二个钉子中时,当我尝试对堆栈大小求和时(或者当我尝试对第一个和第二个钉子做任何事情时),出现分段错误peg。)如果我输入“::1”,它可以正常工作,我可以检查尺寸,知道有0、0和1。

非常感谢您的帮助。

0 个答案:

没有答案