回溯与搜索 四 跳马问题

简介: 回溯与搜索 四 跳马问题

跳马问题

在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

1. #include<iostream>
2. #include<cstdio>
3. #include<iomanip>
4. using namespace std;
5. int X[8]={1,2,2,1,-1,-2,-2,-1};
6. int Y[8]={-2,-1,1,2,2,1,-1,-2};
7. int a[100][100]={0},num=0;
8. bool b[100][100]={0};
9. void print()
10. {
11.   num++;
12.   if(num<=5){
13.     for(int k=1;k<=5;k++){
14.       for(int kk=1;kk<=5;kk++)
15.         cout<<setw(5)<<a[k][kk];
16.       cout<<endl;
17.     }
18.     cout<<endl;
19.   }
20. }
21. int search(int i,int j,int n)
22. {
23.   int k,x,y;
24.   if(n>25){
25.     print();
26.     return 0;
27.   }
28.   for(k=0;k<=7;k++){
29.     x=i+X[k];
30.     y=j+Y[k];
31.     if(x<=5&&x>=1&&y<=5&&y>=1&&(!b[x][y])) {
32.       b[x][y]=1;
33.       a[x][y]=n;
34.       search(x,y,n+1);
35.       b[x][y]=0;
36.       a[x][y]=0;
37.     }
38.   }
39. }
40. int main()
41. {
42.   a[1][1]=1;
43.   b[1][1]=1;
44.   search(1,1,2); 
45.   cout<<num<<endl;
46.   return 0;
47.  }

 

相关文章
|
2月前
|
算法
【算法系列篇】递归、搜索和回溯(四)
【算法系列篇】递归、搜索和回溯(四)
|
2月前
|
算法
【算法系列篇】递归、搜索和回溯(二)
【算法系列篇】递归、搜索和回溯(二)
|
2月前
|
算法
【算法系列篇】递归、搜索和回溯(三)
【算法系列篇】递归、搜索和回溯(三)
|
2月前
|
算法
【算法系列篇】递归、搜索与回溯(一)
【算法系列篇】递归、搜索与回溯(一)
|
12月前
|
人工智能 算法 安全
回溯与搜索 二 八皇后问题 马的遍历
回溯与搜索 二 八皇后问题 马的遍历
|
11月前
|
存储 编译器 C语言
二叉树搜索
在之前的我们已经学过了普通二叉树,了解了基本的二叉树的结构和基本操作了,不过我们之前的二叉树结构都是使用C语言实现的,我们这次来介绍二叉树中更加复杂的树结构,C语言在实现这些结构已经有些吃力了,更适合我们使用C++来实现。
|
12月前
|
算法
回溯与搜索 一 全排列问题
回溯与搜索 一 全排列问题
|
12月前
|
算法
回溯与搜索 三 最高效益 选书
回溯与搜索 三 最高效益 选书
|
移动开发 算法
秒懂算法 | A*搜索
本篇内容包括了A*搜索算法的原理精解以及2个例题。
369 1
秒懂算法 | A*搜索
|
算法 Java Python
【算法题解】 Day30 搜索与回溯
今天的算法是 「搜索与回溯」 相关,“算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,以实战习题的形式理解算法,使用算法。”
88 0