递归:当找到结果后,怎么跳出递归,直接结束程序?
#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;
}