数据结构课程设计实习报告-马踏棋盘.docVIP

数据结构课程设计实习报告-马踏棋盘.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计实习报告-马踏棋盘

数据结构课程设计实习报告 题目:马踏棋盘(实习题2.4) 班级:计算机科学与技术2004班 学号:031010151552010 姓名:游尾妹 日期 :二○○五年七月八日 指导老师:李杨老师 源程序结构 定义函数 caculate() 计算各点的权值 dirctions() 求出各点的最佳方向序列,即优先向权值小的方向,以使运行速度加快 check(int i,int j) 检查(i,j)是否在棋盘内 print() 输出路径走过的序号 程序步骤简介 计算各点的权值,方向 用户输入行数和列数 寻找点的八个可走方向,若所有方向都已走过,则退回前一步,并将此步抹去,使前一步的方向发生变化。 确定下一步该走的方向,依次走完全部点 记录每一步 当步数已满时输出,根据需要可输出一条或多条路径 源程序描述 #include stdio.h #define N 8 int w=0;   /*第几条可走路径*/ int way1[8]={-2,-1,1,2, 2, 1,-1,-2}; int way2[8]={ 1,2, 2,1,-1,-2,-2,-1}; /*在(i,j)位置处的8个可能走的位置*/ int ch[N*N]={0};  /*走过的相应的点的赋值*/ int a[N*N+1][3]={0};   /*路径所经过点的记录*/ int dir[N][N][8];    /*(i,j)点的八个可能走的方向*/ int st=1;  /*走过的步数*/ char c=y;  int weight[N][N];   /*每个点的权值*/ void caculate();     /*计算各点的权值*/ void dirctions();    /*求出各点的最佳方向序列,即优先向权值小的方向*/ void print();    /*输出路径走过的序号*/ int check(int i,int j);  /*检查(i,j)是否在棋盘内*/ void caculate()    /*计算各点的权值,将权值存在weight[i][j]中*/ { int i,j,k; for(i=1;i=N;i++) for(j=1;j=N;j++) for(k=0;kN;k++) { int x,y; x=i+way1[k]; y=j+way2[k];   /*下一步走的点*/ if(x=1x=Ny=1y=N) weight[i-1][j-1]++;  /*权值*/ } } int check(int i,int j)   /*检查(i,j)是否在棋盘内,在返回1,不在返回0*/ { if(i1||i8||j1||j8) return 0;return 1; } void directions()   /*求出各点的最佳方向序列,即优先向权值小的方向*/ { int i,j,k,m,n1,n2,x1,y1,x2,y2,way_1,way_2; for(i=0;iN;i++) for(j=0;jN;j++) { for(k=0;k8;k++)dir[i][j][k]=k; for(k=0;k8;k++) { for(m=k+1;m8;m++) /*对每个方向考察看有没有更好的*/ { way_1=dir[i][j][k]; x1=i+way1[way_1]; y1=j+way2[way_1];   /*k方向时的下一个点*/ way_2=dir[i][j][m]; x2=i+way1[way_2]; y2=j+way2[way_2];   /*m方向时的下一个点*/ n1=check(x1+1,y1+1); n2=check(x2+1,y2+1);  /*判断n1,n2是否在棋盘内*/  if(( n1==0 n2)||( n1 n2weight[x1][y1]weight[x2][y2]))  /*k方向不可达到,而m方向可达到*/ ||  /*都可达到,但m方向权值小*/ { dir[i][j][k]=way_2;dir[i][j][m]=way_1;  /*交换两个方向值,将k走更好的一步棋(即权值小的一步)*/ } } } } } void print()  /*输出路径走过的序号*/ { int x,y; printf(\n------%d answer----\n,+

文档评论(0)

zhuliyan1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档