| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:请各位高手帮帮忙,看看这个程序错哪了?查不出错误,但出不来结果.谢谢啦!
只看楼主 加入收藏
我是小小草
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2009-8-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
请各位高手帮帮忙,看看这个程序错哪了?查不出错误,但出不来结果.谢谢啦!
在西洋棋中的武士与象棋的马相似,走的都是日字的路,
/*武士可以走的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");

}
请各位高手帮帮忙,看看这个程序错哪了?查不出错误,但出不来结果.谢谢啦!
搜索更多相关主题的帖子: 结果 
2009-08-06 21:40
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:15 
Trysolution(k,t,n,a[N][N]);
Trysolution(i+b[s],j+c[s],n,a[N][N]);

将函数Trysolution()调用时的参数 a[N][N] 改为 a
2009-08-06 23:06
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:5 
这里:
void Trysolution(int i,int j,int n,int a[N][N])

函数申明中(形参)的 int a[N][N] int **a 类似,表示要传的参数是一个二级指针,括号里的N是给编译器作类型检查用的(这样写时,前面括号里的N可以省略,后面的不能省略,既可以写作:int a[][N])。
而在传参数(实参)时,我们只需要把二级指针a传给函数;
a[i][j],当在括号中填入数值后,就表示具体的某一项,而a[N][N]是没有意义的,因为不存在这一项(下表范围是0~N-1)。


[ 本帖最后由 CrystalFan 于 2009-8-6 23:18 编辑 ]
2009-08-06 23:16
快速回复:请各位高手帮帮忙,看看这个程序错哪了?查不出错误,但出不来结果.谢谢啦 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013448 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved