Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从特定代码部分跳转到函数开始 包括 使用名称空间std; 整数解(整数i_开始,整数j_开始,整数i_结束,整数j_结束,整数s) { int row_dif=i_start-i_end; int col_dif=j_start-j_end; while(col_dif!=0) { row_dif=i_开始-i_结束; col_dif=j_start-j_end; 如果((行dif>0)和(&(列dif>0)) { i_start=i_start-2; j_start--; } 如果((行dif>0))&(列dif_C++_Algorithm_Loops_Goto - Fatal编程技术网

C++ 从特定代码部分跳转到函数开始 包括 使用名称空间std; 整数解(整数i_开始,整数j_开始,整数i_结束,整数j_结束,整数s) { int row_dif=i_start-i_end; int col_dif=j_start-j_end; while(col_dif!=0) { row_dif=i_开始-i_结束; col_dif=j_start-j_end; 如果((行dif>0)和(&(列dif>0)) { i_start=i_start-2; j_start--; } 如果((行dif>0))&(列dif

C++ 从特定代码部分跳转到函数开始 包括 使用名称空间std; 整数解(整数i_开始,整数j_开始,整数i_结束,整数j_结束,整数s) { int row_dif=i_start-i_end; int col_dif=j_start-j_end; while(col_dif!=0) { row_dif=i_开始-i_结束; col_dif=j_start-j_end; 如果((行dif>0)和(&(列dif>0)) { i_start=i_start-2; j_start--; } 如果((行dif>0))&(列dif,c++,algorithm,loops,goto,C++,Algorithm,Loops,Goto,我被困在需要跳转到功能启动的部分 在我看来,你似乎无意中想到了递归函数 include <iostream> using namespace std; int Solution(int i_start, int j_start, int i_end, int j_end, int s) { int row_dif=i_start-i_end; int col_dif=j_start-j_end; while (col_dif !=0 ) {

我被困在需要跳转到功能启动的部分

在我看来,你似乎无意中想到了递归函数

include <iostream>
using namespace std;

int Solution(int i_start, int j_start, int i_end, int j_end, int s)
{

    int row_dif=i_start-i_end;
    int col_dif=j_start-j_end;

    while (col_dif !=0 )
    {
        row_dif=i_start-i_end;
        col_dif=j_start-j_end;
        if ((row_dif>0) && (col_dif>0))
        {
            i_start=i_start-2;
            j_start--;
        }
        if ((row_dif>0)) && (col_dif<0)
        {
            i_start=i_start-2;
            j_start++;
        }
        if ((row_dif<0) && (col_dif>0 ))
        {
            i_start=i_start+2;
            j_start--;
        }
        if ((row_dif<0) && (col_dif<0))
        {
            i_start=i_start+2;
            j_start++;
        }
        if (row_dif=0)
        {
            if (col_dif>0)
            {
                j_start-2; 
            }
                else if (col_dif<0)
                {
                    j_start+2; 
                }
                    else  //row_dif=0 dhe col_dif=0
                        {
                            cout<<"Problem solved "<<endl;
                        }
        }
    }
    // col_dif=0
    if (row_dif<=-4)
    {
        i_start=i_start+2;
        j_start++;

    }
    if (row_dif>=4)
    {
        i_start=i_start-2;
        j_start--;

    }

}
递归导致状态被推送到程序堆栈上。堆栈的这个概念很重要


在我看来,这是一个非常糟糕的寻路过程。具体来说,是一个带有限制动作的*寻路过程

递归方法使用堆栈,并且是。对于希望最小化移动的解决方案,您希望使用一种方法。您仍将使用堆栈,但您的主要结构将是队列


由于这项挑战似乎是针对搜索算法的,我建议您研究一下我提到的所有内容。

您应该编写一个函数
int sign(int I)
,对于小于、等于或大于零的整数返回-1、0或+1。然后,您的所有代码都变成:

return Solution(i_start - 2, j_start - 1, i_end, j_end, s + 1)
另外,当
col_dif
等于0,但
row_dif
不等于0时,此代码将处理这种情况,而您在代码中没有这样做

要添加条件,请将循环更改为:

if( row_dif == 0 && col_dif == 0 ) {
   // done interrupt
}
i_start -= 2 * sign( row_dif );
j_start -= 1 * sign( col_dif );
while(true){
row_dif=i_开始-i_结束;
col_dif=j_start-j_end;
如果(col_dif==0){
如果(行_dif==0){
//完成
打破
}
如果(标准::abs(第4排)
break;//看起来不对,但符合您的逻辑
col_dif=符号(row_dif);
}
i_开始-=2*符号(行dif);
j_开始-=1*符号(col_dif);
}

< C++ >比较操作符:< C++ >代码>=<代码> >代码> >代码>,这是新手C++程序员的常见错误。

什么是另一个<代码> < <代码> >?@ KLUTT不重要,它是一个算法问题,不是语言问题,我听说过<代码>继续<代码>或<代码>破解< /Cord>语句?其中之一可能是Used返回循环的开始。在创建循环时要小心使用(尽管它比其他方法更好),如果(col_dif>0){j_start-2;}do?和附近的另一个类似错误。我再次建议您重新检查条件,我在前面的评论中指出,条件具有冗余性。如果您简化了问题,您也可以简化答案。如果您在此处提出问题,您可能得不到想要的直接答案。您的解决方案需要一个循环。一旦添加了循环,请使用
continue
中断
将变得微不足道。
while( true ) {
    row_dif=i_start-i_end;
    col_dif=j_start-j_end;
    if( col_dif == 0 ) {
        if( row_dif == 0 ) {
           // done
           break;
        }
        if( std::abs( row_dif ) < 4 )
            break; // does not look right but follows your logic
        col_dif = sign( row_dif );
    }
    i_start -= 2 * sign( row_dif );
    j_start -= 1 * sign( col_dif );
}