骑士问题
在西洋棋(国际象棋)中骑士(就是马)的走法像马,都是”日”字行
(帖子不能画表格,不可以演示走法……在这里有http://www.bansun.com/bbs/thread-6420-1-1.html)
编一个程序 输入棋盘大小 和骑士开始的坐标,输出一个让骑士走遍棋盘每一个格子而且不重复的方法(也就是输出骑士走完棋盘每一个的路径)!!!!!!
以下是我自己写的,错得很离谱,后果很严重,各位高手帮忙看看,谢谢了
# include <stdio.h>
# define N 8
int account=1; //全局计数器,代表骑士移动的格子数目
void knight(int begin_x,int begin_y);
void move (int x,int y); //移动函数
struct //记录移动路径数组
{
int x,y;
}road[N*N+1];
int main()
{
int a,b;
printf(“输入开始坐标”);
scanf(“%d,%d”,&a,&b);
knight(a,b);
}
void knight (int begin_x,int begin_y)
{
road[account].x=begin_x; //对第一个路径赋值
road[account].y=begin_y;
move(road[account].x,road[account].y);
}
void move(int x,int y)
{
int static chessboard[N+1][N+1]={0}; //chessboard[N+1][N+1]=0代表没有经过的格子 chessboard[N+1][N+1]=1代表经过的格子
const way[8][2]={2,1,2,1,-1,-2,-1,-2,-2,1,-2,-1,1,2,1,-2}; //移动方法
int w=0; //w的数字代表移动方法
while(account<=N*N) //account大于N*N就说明已经走完格子
{
if(x+way[w][0]>0&&y+way[w][1]>0&&chessboard[x+way[w][0]][y+way[w][1]]==0)
{
x+=way[w][0]; //如果下一个格子满足条件就把下一格坐标赋值到当前坐标
y+=way[w][1];
account++; //移动到下一个格子
road[account].x=x;
road[account].y=y;
chessboard[x][y]=1; //chessboard[N+1][N+1]=1代表经过的格子
move (road[account].x,road[account].y); //把当前坐标作为起始坐标,继续前进
}
else w++;
if (w>7) //w大于7是说明没有路可以走
{
chessboard[x][y]=0; //当前格子清0
account–; //退回到上一个格子.
}
}
for (account=1;account<=N*N;account++) //打印路径
{
printf(“<%d,%d> ”,road[account].x,road[account].y);
}
}
>> 本文固定链接: http://www.vcgood.com/archives/2549
怎么么有人顶
发帖怎么不可以制作表格呀?也不可以上传附件呀?一楼发的网址好像注册才可以看呀。我晕。