【问题描述】关于马踏棋盘的基本过程:国际象棋的棋盘为 8*8 的方格棋盘。现将"马"放在任意指定的方格中,按照"马"走棋的规则将"马"进行移动。要求每个方格只能进入一次,最终使得"马"走遍棋盘的64个方格。

输入一个n,表示大小为n x n的棋盘

输出马走遍棋盘所有格子的顺序和不同的走法数量

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int vis[][];
int cnt = , n, m;
int inbord(int x, int y)//判断是否在棋盘上
{
if (x >= && x<n&&y >= && y<m)
return ;
else
return ;
}
void dfs(int x, int y, int ans)
{
if (inbord(x, y) && !vis[x][y])
{
ans++;
vis[x][y] = ans;
if (ans == n * m)
{
cnt++;
printf("#case %d\n", cnt);
for (int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
printf("%4d", vis[i][j]);
printf("\n");
}
vis[x][y] = ;//回溯,遍历不同情况
return;
}
else//八个方向
{
dfs(x - , y - , ans);
dfs(x - , y + , ans);
dfs(x + , y - , ans);
dfs(x + , y + , ans);
dfs(x + , y - , ans);
dfs(x + , y + , ans);
dfs(x - , y + , ans);
dfs(x - , y - , ans);
vis[x][y] = ;//回溯,一定要走完整个棋盘,要尝试不同方向
}
}
else
return;
}
int main()
{
scanf("%d%d", &n, &m);
memset(vis, , sizeof(vis));
dfs(, , );
return ;
}

最新文章

  1. 【MVVM】模型认识理解,
  2. &lt;把时间当做朋友&gt;读书笔记
  3. SqlCommand执行带GO的SQL脚本文件
  4. CentOS 6.5安装 ASM lib
  5. UOJ30——【CF Round #278】Tourists
  6. C# 根据IP地址获取城市
  7. JS删除数组条目中重复的条目
  8. LTE Module User Documentation(翻译5)——Mobility Model with Buildings
  9. 【题解】【排列组合】【回溯】【Leetcode】Gray Code
  10. android之location01
  11. 支付宝修改回调地址后 issign=false
  12. **json_encode:让Json更懂中文(JSON_UNESCAPED_UNICODE)
  13. IP地址理解_IP地址=网络地址+主机地址,但是具体前面多少是网络地址看题目说明
  14. 如何实现MySQL随机查询数据与MySQL随机更新数据?
  15. HDU 4916 Count on the path
  16. 再次深入 C# Attribute
  17. ubuntu下mysql二进制包安装
  18. encodeURI与decodeURI
  19. 【SSD,FIO,SAS选择的一些小结】SSD,FIO,SAS选择的一些小结
  20. iOS——系统提供的dispatch方法

热门文章

  1. SQLAlchemy 进阶
  2. C# 世界坐标 页面坐标 PageUnit PageScale
  3. ADB常用命令简洁版整理
  4. C# -- 泛型(3)
  5. ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结
  6. Weekly Contest 118
  7. python爬虫的一些小小问题、python动态正则表达式
  8. Java create azure web app
  9. [译文]Casperjs1.1.0参考文档-安装
  10. ant实例