骑士走棋盘
2015-10-01 17:43
369 查看
骑士的走法,基本上可以使用递回来解决,但是纯綷的递回在维度大时相当没有效率,一个聪明的解法由J.C. Warnsdorff在1823年提出,简单的说,先将最难的位置走完,接下来的路就宽广了,骑士所要走的下一步, 「为下一步再选择时,所能走的步数最少的一步。使用这个方法,在不使用递回的情况下,可以有较高的机率找出走法(找不到走法的机会也是有的) 。
#include <iostream> #include<iomanip>//use setw #include<string.h>//use memset using namespace std; int chessBoard[8][8] = { 0 }; bool travel(int, int); void show(); int main() { int startX, startY; cout << "请输入坐标\n"; cin >> startX >> startY; if (travel(startX, startY)) show(); else cout << "fail!\n"; return 0; } bool travel(int x, int y) { chessBoard[x][y] = 1; //按照“日”字走法一共有8种 int moveX[8] = { -2, -1, 1, 2, 2, 1, -1, -2 }; int moveY[8] = { 1, 2, 2, 1, -1, -2, -2, -1 }; //按照“日”字走法后的坐标 int nextX[8] = { 0 }; int nextY[8] = { 0 }; // int tempX, tempY; int count;//记录下一步能走的总个数 int exist[8] = { 0 }; int min;//记录下一步该走的数组里的下标 for (int m = 2; m <= 64; m++) { memset(exist, 0, sizeof(exist)); count = 0;// for (int i = 0; i < 8; i++) { tempX = x + moveX[i]; tempY = y + moveY[i]; if (tempX >= 0 && tempY >= 0 && tempX<=7 && tempY <=7 && chessBoard[tempX][tempY] == 0) { nextX[count] = tempX; nextY[count] = tempY; count++; } } if (count == 0) return false; else if (count == 1) min = 0; else { for (int i = 0; i < count; i++) { for (int j = 0; j < 8; j++) { tempX = nextX[i] + moveX[j]; tempY = nextY[i] + moveY[j]; if (tempX >= 0 && tempY >= 0 && tempX<=7 && tempY<=7 && chessBoard[tempX][tempY] == 0) exist[i]++; } } int temp = 9; for (int i = 0; i < count; i++) { if (exist[i] < temp) { temp = exist[i]; min = i; } } } x = nextX[min]; y = nextY[min]; chessBoard[x][y] = m; }//for (int m = 2; m <= 64; m++) return true; } void show() { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { cout << left << setw(4) << chessBoard[i][j]; cout << ((j == 7) ? "\n" : " "); } } }
相关文章推荐
- HDU-3826-Squarefree number
- LightOJ 1236 Pairs Forming LCM
- 打造android更加完美的万能adapter
- 变量作用域
- java11:数组试用
- iOS 开发之网络请求
- swift练习二
- 简单缓存的实现
- JAVA基础--db11_java异常_Object类
- CSS样式背景样式
- hdu1133
- Arrays.asList()
- Aizu 2300 Calender Colors(暴力)
- 黑马程序员——java学习笔记--枚举
- UITabBarController详细说明(简介和设置)
- MongoDB聚合整理
- Myinterface
- PowerDesigner V16.5 安装文件 及 破解文件
- phpmyadmin高级功能尚未完全设置部分功能未激活
- 下载:SQL Server 2016 CTP2.4 (x64) - DVD (English)