#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. Node http和express和mysql

    const http = require("http");const express = require("express");const mysql = re ...

  2. Vue 初识Vue

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  3. SAP PA认证

    ----------------------------------------------------------------转帖---------------------------------- ...

  4. Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo

    1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...

  5. Security Testing Test Scenarios

    1 check for sql injection attacks2 secure pages should use https protocol3 page crash should not rev ...

  6. Lodop打印二维码内容长度不同如何大小相同

    利用Loodop打印控件打印二维码的时候,往往传入的数值是变量,有的只有一个数字,有的却一大堆数字和字母,根据内容长度不同,二维码大小也不同,这样如果批量打印二维码标签,传入的数据是不同的,会造成有的 ...

  7. BZOJ5252 八省联考2018林克卡特树(动态规划+wqs二分)

    假设已经linkcut完了树,答案显然是树的直径.那么考虑这条直径在原树中是怎样的.容易想到其是由原树中恰好k+1条点不相交的链(包括单个点)拼接而成的.因为这样的链显然可以通过linkcut拼接起来 ...

  8. 自学Linux Shell1.2-Linux目录结构

    点击返回 自学Linux命令行与Shell脚本之路 1.2-Linux目录结构 /:  根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置 ...

  9. 一种使用emwin库函数导致hardfault的情况

    @2018-08-27 使用函数 WM_SendMessageNoPara(hWin_MainTask, WM_INIT_DIALOG),调试至此处进入hardfault,经查是由于hWin_Main ...

  10. luogu3385 负环 (spfa)

    我在做spfa的时候,如果有一个点被更新了超过N次,证明这个图里是有负环的. (神TM输出YE5和N0) #include<bits/stdc++.h> #define pa pair&l ...