Knight Moves UVA - 439(BFS典例)
2017-04-13 10:07
465 查看
给出国际象棋棋盘中的两个点,求马从一个点跳到另一个点的最少步数。
#include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; int x, y; char cx, cy; const int maxn = 10; int d[maxn][maxn]; int dc[] = { 1,2,2,1,-1,-2,-2,-1 }; int dr[] = { -2,-1,1,2,2,1,-1,-2 }; struct Node { int x, y; Node(int x = 0, int y = 0) :x(x), y(y) {} }; Node p[maxn][maxn]; bool in(int x, int y) { return x >= 1 && x <= 8 && y >= 1 && y <= 8; } void BFS() { queue<Node> Q; Node u(x, cx - 'a' + 1); Q.push(u); memset(d, -1, sizeof(d)); //注意初始化顺序,此句与下一句不可颠倒 d[x][cx - 'a' + 1] = 0; while (!Q.empty()) { Node u = Q.front(); Q.pop(); if (u.x == y && u.y == (cy - 'a' + 1)) return; for (int i = 0; i < 8; ++i) { Node v(u.x + dr[i], u.y + dc[i]); if (in(v.x, v.y) && d[v.x][v.y] < 0) { d[v.x][v.y] = d[u.x][u.y] + 1; p[v.x][v.y] = u; Q.push(v); } } } } int main() { while (cin>>cx>>x>>cy>>y) { BFS(); cout << "To get from " << cx << x << " to " << cy << y << " takes " << d[y][cy - 'a' + 1] << " knight moves." << endl; } }
相关文章推荐
- UVa 439 - Knight Moves (BFS)
- UVA 439 Knight Moves 走象棋 (DFS or BFS)
- uva439 - Knight Moves(BFS求最短路)
- UVa 439 Knight Moves——bfs
- uva 439 Knight Moves(BFS)
- UVA 439 Knight Moves --DFS or BFS
- [uva-439]Knight Moves(BFS)
- UVa 439 - Knight Moves (BFS)
- UVa - 439 - Knight Moves(bfs求最短路)
- UVa439---Knight Moves(BFS应用)
- UVA 439-Knight Moves(bfs)
- UVA------439 - Knight Moves(bfs简单)
- uva 439 Knight Moves(BFS遍历)
- 【UVA439】 Knight Moves BFS (3/1000)
- uva-439 - HDOJ-1372-Knight Moves-翻译详解-BFS
- uva439 Knight Moves (搜索 BFS, BFS启蒙题)
- UVa 439/HDU 1372/POJ 2243/ZOJ 1091 Knight Moves(BFS&纯数学方法)
- UVA 439 Knight Moves 基础BFS
- UVA 439 Knight Moves --DFS or BFS
- UVA439_Knight Moves(BFS)