#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <string>
using namespace std; const int maxn = + ;
int map[][];
int cnt;
int d[][];
string start, over;
int dir[][] = { { -, }, { -, }, { , }, { , }, { , - }, { , - }, { -, - }, { -, - } };
  //棋盘方向通常会用二维数组来表示方向
struct Node
{
int r, c; // 行,列
//int dir; // 方向
Node(int r = , int c = ) : r(r), c(c) {}
}; bool inside(int r, int c)
{
if (r < || r >= || c < || c >= ) return false;
return true;
} //start row, start col, over row, over col
bool BFS(int sr, int sc, int or, int oc)
{
queue<Node> Q;
memset(d, , sizeof(d));
Node u(sr, sc);
Q.push(u);
while (!Q.empty()) {
Node u = Q.front(); Q.pop();
if ((u.r == or) && (u.c == oc)) { //如果找到,就true;
return true;
}
for (int i = ; i < ; i++) {
Node v = Node(u.r + dir[i][], u.c + dir[i][]);
if (inside(v.r, v.c) && d[v.r][v.c] == ) {
d[v.r][v.c] = d[u.r][u.c] + ;
Q.push(v);
}
}
}
return false;
} void print_ans(Node u)
{
cout << "To get from " << start << " to " << over << " takes " << d[u.r][u.c] << " knight moves.\n";
} int main()
{
while (cin >> start >> over) {
memset(map, , sizeof(map)); int sr = start[] - 'a', sc = start[] - '' - , or = over[] - 'a', oc = over[] - '' - ;
BFS(sr, sc, or, oc);
print_ans(Node(or, oc));
}
return ;
}

总结:通常最短路(最优解)问题会考虑用BFS来进行求解

Uva439:BFS题目总结的更多相关文章

  1. BFS广搜题目(转载)

    BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...

  2. ZOJ3865:Superbot(BFS) The 15th Zhejiang University Programming Contest

    一个有几个小坑的bfs 题目很长,但并不复杂,大概总结起来有这么点. 有t组输入 每组输入n, m, p.表示一个n*m的地图,每p秒按键会右移一次(这个等会儿再讲). 然后是地图的输入.其中'@'为 ...

  3. ZOJ 1091 (HDU 1372) Knight Moves(BFS)

    Knight Moves Time Limit: 2 Seconds      Memory Limit: 65536 KB A friend of you is doing research on ...

  4. hdu1372 Knight Moves BFS 搜索

    简单BFS题目 主要是读懂题意 和中国的象棋中马的走法一样,走日字型,共八个方向 我最初wa在初始化上了....以后多注意... 代码: #include <iostream> #incl ...

  5. hdu 1242 Rescue(BFS入门)

    第一次用容器做的BFS题目,题目有个地方比较坑,就是遍历时的方向,比如上下左右能AC,右上左下就WA #include <stdio.h> #include <string.h> ...

  6. poj1915 Knight Moves(BFS)

    题目链接 http://poj.org/problem?id=1915 题意 输入正方形棋盘的边长.起点和终点的位置,给定棋子的走法,输出最少经过多少步可以从起点走到终点. 思路 经典bfs题目. 代 ...

  7. HDU2612 BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 , 一道比较简单的广搜(BFS)题目. 算法: 设置两个dist[][]数组,记录Y和M到几个K ...

  8. 关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别

    关于模板什么的还有算法的具体介绍 戳我 这里我们只做所有最短路的具体分析. 那么同是求解最短路,这些算法到底有什么区别和联系: 对于BFS来说,他没有松弛操作,他的理论思想是从每一点做树形便利,那么时 ...

  9. 蓝桥杯 调手表(bfs解法)

    小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时 ...

随机推荐

  1. JVM EXCEPTION_ACCESS_VIOLATION

    ## A fatal error has been detected by the Java Runtime Environment:## EXCEPTION_ACCESS_VIOLATION (0x ...

  2. js选择排序。

    <script> , , , , , , , ]; ; j<len; j++ ){ // 假设min为最小值 var minIndex = j; var min = arr[j]; ...

  3. scope 前缀开头的方法

    https://learnku.com/docs/laravel/5.6/eloquent/1403 本地范围 本地范围允许定义通用的约束集合以便在应用中复用. 例如, 你可能经常需要获取「受欢迎的」 ...

  4. WebAssembly是什么?

    现在的JavaScript代码要进行性能优化,通常使用一些常规手段,如:延迟执行.预处理.setTimeout等异步方式避免处理主线程,高大上一点的会使用WebWorker.即使对于WebWorker ...

  5. windows常见数据类型

    一,常见数据类型 WORD:                16位无符号整形数据 DWORD:             32位无符号整型数据(DWORD32) DWORD64:         64位 ...

  6. ansible系列6-用户管理

    第一种:新增用户 ansible host -m user -a "name=zhang shell=/bin/bash groups=admin,root append=yes home= ...

  7. BZOJ1559[JSOI2009]密码——AC自动机+DP+搜索

    题目描述 输入 输出 样例输入 10 2 hello world 样例输出 2 helloworld worldhello 提示 这题算是一个套路题了,多个串求都包含它们的长为L的串的方案数. 显然是 ...

  8. C# 对象与JSON字符串互相转换的三种方式

    C# 对象与JSON字符串互相转换的三种方式 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 关于内存对象和JSON字符串的相互转换, ...

  9. day25 上山练习 计算圆练习

    # 练习一:在终端输出如下信息 # 小明,10岁,男,上山去砍柴 # 小明,10岁,男,开车去东北 # 小明,10岁,男,最爱大保健 # 老李,90岁,男,上山去砍柴 # 老李,90岁,男,开车去东北 ...

  10. Leetcode 461.汉明距离 By Python

    两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y ...