Ka的回溯编程练习 Part5|跳马,又名马的遍历2

 1 #include <stdio.h>
 2 int TheEarthLand[6][6]={0};
 3 int HowToGoX[]={0,1,2,2,1,-1,-2,-2,-1};
 4 int HowToGoY[]={0,-2,-1,1,2,2,1,-1,-2};
 5 int total=0;
 6 void op()
 7 {
 8     total++;
 9     printf("<Way%d>:\n",total);
10     int i,j;
11     for(i=1;i<=5;i++)
12     {
13         for(j=1;j<=5;j++)
14             printf("%d ",TheEarthLand[i][j]);
15         printf("\n");
16     }
17 }
18 void HereWeGo(int n,int x,int y) //已满足几个点 
19 {
20     if(n==25) op();  //满足了25个点就输出 
21     else 
22     {
23         int i,Lox,Loy;  //这里的坐标储存一定要用局部变量,不然出错 
24         for(i=1;i<=8;i++) //八个方向都试试 
25         {
26             Lox=x+HowToGoX[i]; //先得出此步的目的坐标 
27             Loy=y+HowToGoY[i];
28             if(Lox>=1&&Lox<=5&&Loy>=1&&Loy<=5&&TheEarthLand[Lox][Loy]==0)
29             {//如果坐标在棋盘内,而且这个点没来过  注意短路逻辑顺序  
30                 TheEarthLand[Lox][Loy]=n+1; //记录到点 
31                 HereWeGo(n+1,Lox,Loy); 
32                 TheEarthLand[Lox][Loy]=0;//回复现场
33             }
34         }
35          
36     }
37 } 
38 int main()
39 {
40     TheEarthLand[1][1]=1; //第一个点调1 
41     HereWeGo(1,1,1); //第一个点,坐标(1,1) 
42     return 0;
43 }

 

跳马问题。在5*5格的棋盘上,有一只中国象棋的马,从(1,1)点出发,按日字跳马,它可以朝8个方向跳,但不允许出界或跳到已跳过的格子上,要求在跳遍整个棋盘。

输出前5个方案及总方案数。
输出格式示例:
1    16   21   10   25
20  11   24   15    22
17  2     19   6     9
12  7     4     23   14
3   18    13   8     5

这个题主要在坐标传入的问题上需要注意:全局变量作为新坐标会导致坐标储存的混乱,必须使用局部变量储存新坐标

转载于:https://www.cnblogs.com/KakagouLT/p/4530982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值