一、骑士巡游问题
题目描述:骑士在8*8的国际象棋棋盘上进行巡游,当指定骑士出发的位置后(x,y),能输出骑士遍历棋盘的所有路径坐标。
输出效果:
代码(请在visual stdio下运行,Dev-C++无法编译vector):
#include <utility>
#include <string>
#include <vector>
#include <iostream>
using namespace std;const int N = 27;
int p, q;
bool st[N][N];
vector<pair<int, int>> path;
int dx[8] = { -2,-2,-1,-1,1,1,2,2 };
int dy[8] = { -1,1,-2,2,-2,2,-1,1 };bool dfs(int x, int y, int cnt){path.push_back({ x,y });if (cnt ==64) {for (auto a : path) cout << "(" << a.first <<"," << a.second << ")" << endl;return true;}st[x][y] = true;for (int i = 0; i < 8; i++){int a = x + dx[i], b = y + dy[i];if (a < 1 || a > 8 || b < 1 || b > 8) continue;if (st[a][b]) continue;if (dfs(a, b, cnt + 1))return true; //这点很重要,能保证输出的是字典序最小的。}st[x][y] = false;path.pop_back();return false;
}int main(){int i, j;cin >> i >> j;path.clear();memset(st, 0, sizeof(st));bool flag = false;if (dfs(i, j, 1)) {flag = true;}
}
【如何解决了问题,烦请点赞+收藏】