递归:当找到结果后,怎么跳出递归,直接结束程序?

fjn2012 2012-11-29 07:31:10
#include <iostream>
using namespace std;
int n=1;
int fx[8]={-1,-2,-2,-1,1,2,2,1};
int fy[8]={2,1,-1,-2,-2,-1,1,2};
int board[5][5];

int main()
{
int x1,y1;
//为什么只有输入x=y时才有结果
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
board[i][j]=0;
}
cout<<"输入初始坐标(x1,y1)"<<endl;
cin>>x1>>y1;
x1=x1-1;
y1=y1-1;
board[x1][y1]=1;
n=1;
void search(int i,int j);
search (x1,y1);
return 0;
}
void search (int i,int j)
{
int k,newi,newj;
int check (int i,int j,int k);
void out();
for (k=0;k<8;k++)
if ( check(i,j,k)==1)
{
newi=i+fx[k];
newj=j+fy[k];
n++;
board [newi][newj]=n;
if (n==25)
out();//当输出之后,怎么跳出递归?
else
search (newi,newj);
}
board[i][j]=0;
n--;
if(n==1)
cout<<"no solution"<<endl;

}

void out ()
{
int i,j;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
cout<<board[i][j]<<" ";
cout<<endl;}
cout<<endl;

}

int check(int i,int j,int k)
{
int flag=1;
i=i+fx[k];
j=j+fy[k];
if(i<0 || i>4 || j<0 ||j>4)
flag=0;
else
if (board[i][j]>0)
flag=0;
return flag;
}
...全文
2774 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑有偏锋 2012-11-29
  • 打赏
  • 举报
回复 1
设置一个全局变量,作为找到解的标记, 在递归函数的开头这么写 if(flagfind==true) return;
doki0314 2012-11-29
  • 打赏
  • 举报
回复
用break跳出循环体。
ri_aje 2012-11-29
  • 打赏
  • 举报
回复
直接退出程序用的 http://www.cplusplus.com/reference/cstdlib/exit/,不知道你是不是要这个。
fjn2012 2012-11-29
  • 打赏
  • 举报
回复
递归了,我只想检测到一个结果就结束程序。怎么办?
fjn2012 2012-11-29
  • 打赏
  • 举报
回复
exit(0)是什么?没见过
漫步者、 2012-11-29
  • 打赏
  • 举报
回复
引用 楼主 fjn2012 的回复:
#include <iostream> using namespace std; int n=1; int fx[8]={-1,-2,-2,-1,1,2,2,1}; int fy[8]={2,1,-1,-2,-2,-1,1,2}; int board[5][5]; int main() { int x1,y1; //为什么只有输入x=y时才有结果 ……
断点吧,有可能根本就没用执行递归!
ri_aje 2012-11-29
  • 打赏
  • 举报
回复
exit(0)?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧