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--;

    }

}

我试图用我自己的方法来解决红骑士最短路径,但我被困在一个我需要跳到功能启动的部分。作为一个输入条件,我决定使用row_dif=0但是当row_dif确实达到0值时,我还需要检查是否有更多的移动(row_dif>=4row_dif<=-4)可用。如果有可用的移动,我需要再次跳转到while循环。

最佳答案

我被困在一个需要跳转到功能启动的地方
在我看来,你好像是被递归函数的概念绊倒了。有点像

return Solution(i_start - 2, j_start - 1, i_end, j_end, s + 1)

递归将状态推送到程序堆栈上。这个堆栈的概念很重要。
在我看来,Red Knight Shortest Path challenge是一个非常多的探路者具体地说,一个有约束运动的寻路。
递归方法使用堆栈,并且depth-first对于希望最小化移动的解决方案,需要使用breadth-first方法。您仍将使用堆栈,但您的主要结构将是队列。
由于这个挑战似乎是针对搜索算法的,我建议对我提到的每一件事都进行研究。

关于c++ - 从某些代码部分开始跳转到功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51847786/

10-12 20:04