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