| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 944 人关注过本帖
标题:骑士之旅,请指点(用数组实现)
只看楼主 加入收藏
phyinger
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-8-31
收藏
 问题点数:0 回复次数:6 
骑士之旅,请指点(用数组实现)

因为刚学完数组,不知道后面的知识,但是书后的练习题有这样的题目,写了一个程序,感觉又繁琐又难看,而且我也不大会注解,毛病有不少,但自己又找不出来,所以请高手指点我的不足的地方,比如算法,注释,命名等。而且程序运行后无法遍历。所以非常诚恳的请教高手,请不吝指点迷津,小弟万分感谢
谢谢!
题目:8*8的棋盘上,象棋中的马能否走完64个方格,每个方格只能走一次。

#include<stdio.h>
int bestchoice(int a[],int n);
main()
{
int board[8][8]={1,0}, //棋盘,从board[0][0]开始走
moveRow[8]={2,1,-1,-2,-2,-1,1,2}, //存放横向坐标
moveColumn[8]={-1,-2,-2,-1,1,2,2,1}, // 存放纵向坐标
visitLevel[8][8]={2,3,4,4,4,4,3,2,3,4,6,6,6,6,4,3, //访问等级,对应棋盘坐标
4,6,8,8,8,8,6,4,4,6,8,8,8,8,6,4,4,6,8,8,8,8,6,4,4,6,8,
8,8,8,6,4,3,4,6,6,6,6,4,3,2,3,4,4,4,4,3,2},
a[8]; //存放访问等级的数据
int row,column,row1,column1,condition,count;
int moveNumber; //走法 取值0--7,共8种
row=0;
row1=0; //纪录row上次的值
column=0;
column1=0; //纪录column上次的值
condition=1;
while(condition>0) //condition判断马是否能继续走动,等于0意味着走不动
{
for(count=0;count<8;count++) //初始化a[8],令其元素都等于零,以便存入数据
a[count]=0;

condition=0; //初始化,控制循环

for(moveNumber=0;moveNumber<8;moveNumber++) //将各种"走法"的访问等级存入a[8]
{
row+=moveRow[moveNumber];
column+=moveColumn[moveNumber];
if(row>=0&&row<=7&&column>=0&&column<=7&&board[row][column]==0) //判断走法是否越界
{
condition++;
a[moveNumber]=visitLevel[row][column];
}
row=row1;
column=column1;
} //结束for循环
if(condition>0){
moveNumber=bestchoice(a,8); //选择最佳的走法
row+=moveRow[ moveNumber ];
column+=moveColumn[ moveNumber ]; //移动
row1=row;
column1=column;
board[row][column]=1; //能到达的方格标记为1
}
}
printf("\n1代表可以到达,0代表不能到达:\n");
int i,j;
for(i=0;i<8;i++) {
for(j=0;j<8;j++)
printf("%3d",board[i][j]);
printf("\n");
}
return 0;
}
int bestchoice(int a[],int n) //选择最小的访问等级,返回下标,即为moveNumber
{
int min=9;
int i;
for(i=0;i<n;i++)
{
if(a[i]!=0&&a[i]<min)
min=a[i];
}
for(i=0;i<n;i++)
{
if(min==a[i])
return i;
}
}

搜索更多相关主题的帖子: 骑士 象棋 int 方格 
2007-08-31 21:24
phyinger
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-8-31
收藏
得分:0 
回复:(phyinger)骑士之旅,请指点(用数组实现)
为什么没人回答呢》?
请看过的人指教
2007-09-01 17:51
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 

刚学完数组就写得出这种程序?



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]

2007-09-01 17:55
phyinger
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-8-31
收藏
得分:0 

书里边有提示,关键步骤都给出来了,所以折腾出这个程序,有滥竽充数之嫌,呵呵
主要是想请各位高手告诉我一下怎么写注释和命名变量等,自己写的很乱,我看着都麻烦

2007-09-01 18:04
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
这种程序根本不是给新手写的
你要是不会独立地写出来,那帮你写了注释也没有用
你要是会独立写,你根本就不需要问怎么去注释


by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-09-01 18:07
phyinger
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-8-31
收藏
得分:0 
不是,这个程序是我自己写的,注解也是自己写的,但是总觉得自己编程风格太散乱,所以想请教高手,
哪怕给出我一个算法思路也好,谢谢了(我的程序有3个方格到不了,大家可以运行一下就知道了)
2007-09-01 18:12
快速回复:骑士之旅,请指点(用数组实现)
数据加载中...
 
   



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

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