请各位高手帮帮忙,看看这个程序错哪了?查不出错误,但出不来结果.谢谢啦!
在西洋棋中的武士与象棋的马相似,走的都是日字的路,/*武士可以走的8个位置如图:
· ·
· ·
·
· ·
· ·
设当前位置为(0,0),则下步可走位置为(2,1)、(1,2)、(-1,2)、(-2,1)、(-2,-1)、(-1,-2)、(1,-2)、(2,-1).
写一个递归程序,输入一个起点的坐标,找出一条从第一格起可以让武士棋走完棋盘格而不重复的路径.
#include<stdio.h>
#define N 80
struct number
{int x;
int y;
}str[N];
void Knight(int n);
void Trysolution(int i,int j,int n,int a[N][N]);
void Outsolution(int n);
void main()
{int n=8;
Knight(n);
}
void Knight(int n)
{int a[N][N];
int i,j,k,t;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
scanf("k=%d,t=%d",&k,&t);
a[k][t]=1;
Trysolution(k,t,n,a[N][N]);
}
void Trysolution(int i,int j,int n,int a[N][N])
{int s;
int static lenth=1;
int static m=1;
int static g=1;
int b[8]={-1,1,-2,2,-2,2,-1,1};
int c[8]={-2,-2,-1,-1,1,1,2,2};
if(lenth==n*n)
Outsolution(n);
else
{
for(s=0;s<8;s++)
if((a[i+b[s]][j+c[s]]==0)&&i+b[s]>0&&i+b[s]<=n&&j+c[s]>0&&j+c[s]<=n)
{a[i+b[s]][j+c[s]]=1;
str[m++].x=i+b[s];
str[g++].y=j+c[s];
lenth++;
Trysolution(i+b[s],j+c[s],n,a[N][N]);
m--;
g--;
a[i+b[s]][j+c[s]]=0;
lenth--;
}
}
}
void Outsolution(int n)
{int static num=0;
int i;
printf("%d:",++num);
for(i=1;i<n*n;i++)
printf("(%d,%d)",str[i].x,str[i].y);
printf("\n");
}
请各位高手帮帮忙,看看这个程序错哪了?查不出错误,但出不来结果.谢谢啦!