我的程序是:
#include <stdio.h>
#include <math.h>
#include <time.h>
int N,p;
int sum=0,a[2][1000];
int panduan()
{
int i,j;
for(i=0;i<2;i++)
for(j=0;j<N;j++)
if(a[i][j]!=1)
return 0;
return 1;
}
void fun(int x,int y,int result,int dq)
{
a[x][y]=1;
if(dq==result)
if(panduan())
{
sum++;
}
if(x+1<2&&a[x+1][y]==0)
{
fun(x+1,y,result,dq+1);
a[x+1][y]=0;
}
if(x-1>=0&&a[x-1][y]==0)
{
fun(x-1,y,result,dq+1);
a[x-1][y]=0;
}
if(y+1<N&&a[x][y+1]==0)
{
fun(x,y+1,result,dq+1);
a[x][y+1]=0;
}
if(y-1>=0&&a[x][y-1]==0)
{
fun(x,y-1,result,dq+1);
a[x][y-1]=0;
}
if(x+1<2&&y-1>=0&&a[x+1][y-1]==0)
{
fun(x+1,y-1,result,dq+1);
a[x+1][y-1]=0;
}
if(x+1<2&&y+1<N&&a[x+1][y+1]==0)
{
fun(x+1,y+1,result,dq+1);
a[x+1][y+1]=0;
}
if(x-1>=0&&y-1>=0&&a[x-1][y-1]==0)
{
fun(x-1,y-1,result,dq+1);
a[x-1][y-1]=0;
}
if(x-1>=0&&y+1<N&&a[x-1][y+1]==0)
{
fun(x-1,y+1,result,dq+1);
a[x-1][y+1]=0;
}
}
int main()
{
int i,j,k;
double start,end;
scanf("%d",&N);
start=time(NULL);
k=2*N;
for(i=0;i<2;i++)
for(j=0;j<N;j++)
{
fun(i,j,k,1);
a[i][j]=0;
}
printf("%d",sum);
end=time(NULL);
printf("\n%lf",end-start);
}