首页 > 用户发贴区 > 编程问题提问区 > 骑士问题 谢谢
2008
07-22

骑士问题


在西洋棋(国际象棋)中骑士(就是马)的走法像马
,都是字行
(帖子不能画表格,不可以演示走法……在这里有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);
}

}


骑士问题 谢谢》有 2 条评论

  1. 三刀流d 说:

    怎么么有人顶

  2. 三刀流d 说:

    发帖怎么不可以制作表格呀?也不可以上传附件呀?一楼发的网址好像注册才可以看呀。我晕。

     

留下一个回复