#include<>
int a[300][2],z;
int m,n,p;
int ifok1(int x1,int y1,int x2,int y2)
{
if(x1>=y1 && x2>=y2) return 1;
else if(x2==0) return 1;
else if(x1==0) return 1;
return 0;
}
int ifok2(int n,int x,int y)
{
if(n%2==0)
for(int i=0;i<n;i+=2)
if(x==a[i][0] && y==a[i][1])
return 0;
if(n%2==1)
for(int i=1;i<n;i+=2)
if(x==a[i][0] && y==a[i][1])
return 0;
return 1;
}
void fun(int x1,int y1,int x2,int y2,int time)
{
int i,j;
if(ifok1(x1,y1,x2,y2) && ifok2(time,x1,y1))
{
a[time][0]=x1;
a[time][1]=y1;
}
else return;
if(x1==0 && y1==0)
{
printf("第%d种方法:\n",z+1);
printf("(%d,%d)\n",m,n);
for(i=1;i<=time;i++)
printf("(%d,%d)\n",a[i][0],a[i][1]);
printf("\n");
z++;
return;
}
else if(time%2==0)
{
for(i=p;i>=1;i--)
for(j=0;j<=i;j++)
{
if(x2+j<=n && y2+(i-j)<=m)
fun(x1-j,y1-(i-j),x2+j,y2+(i-j),time+1);
}
}
else if(time%2==1)
{
商人过河C语言代码 来自淘豆网www.taodocs.com转载请标明出处.