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>=4
或row_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/