2014_3_29_周赛 马腿上的最短路
题目描述
在一个 n*m 的棋盘上有一些点已被己方棋子占用。有一只马要从点 S(x_s, y_s) 走到点 T(x_t, y_t) ,现求一个步数最少的方案。马的每一步是这样走的:先从起点 A 向上下左右任意方向走 1 格经过点 B,再顺时针或逆时针旋转 π/4 后走 sqrt(2) 格到达点C。但这是中国象棋里的马而不是国际象棋里的 knight,即如果经过的点 B 被占用,则会发生“蹩(bié)马腿”不能这样走。只有当B 与 C 都未被占用时马才能从 A 跳到 C。
输入格式
输入包含多组数据,以 EOF 结束。
每组数据第一行包含六个整数m,n,x_s,y_s,x_t,y_t。接下来 n 行给出一个 n*m 的〇一矩阵,其中 1 表示已经被占用的格子。
0 < m, n <= 100
0 <= x_s, x_t < n
0 <= y_s, y_t < m
输出
对于每组数据,输出所求的最少步数。若不能到达(包含起点或终点被占用的情况),则输出 No solution!。
样例输入
4 4 0 0 3 2
0010
0000
0000
0001
4 4 0 0 3 2
0010
0000
0100
0001
样例输出
3
No solution!
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
typedef struct node {
int x, y;
} node;
const int dx[8] = {2, 1, -1, -2, -2, -1, 1, 2};
const int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
const int bx[8] = {1, 0, 0, -1, -1, 0, 0, 1};
const int by[8] = {0, 1, 1, 0, 0, -1, -1, 0};
bool a[105][105], vis[105][105];
int step[105][105];
int m, n, sx, sy, tx, ty;
bool check(int x, int y) {
if (x >= 0 && x < m && y >= 0 && y < n)
return true;
else
return false;
}
int bfs() {
memset(vis, 0, sizeof (vis));
memset(step, 0, sizeof (step));
queue<node> q;
node h, n;
h.x = sx;
h.y = sy;
vis[sx][sy] = true;
q.push(h);
while (!q.empty()) {
h = q.front();
q.pop();
if (h.x == tx && h.y == ty)
return step[h.x][h.y];
for (int i = 0; i < 8; i++) {
n.x = h.x + dx[i];
n.y = h.y + dy[i];
//条件很多
if(check(n.x, n.y) && a[h.x+bx[i]][h.y+by[i]] == 0 && !vis[n.x][n.y] && a[n.x][n.y] == 0) {
q.push(n);
step[n.x][n.y] = step[h.x][h.y] + 1;
vis[n.x][n.y] = true;
}
}
}
return -1;
}
int main() {
while (scanf("%d%d%d%d%d%d", &m ,&n, &sx, &sy, &tx, &ty) == 6) {
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
scanf("%1d", &a[i][j]);
if (a[sx][sy] == 1 || a[tx][ty] == 1) {
printf("No solution!\n");
continue;
}
int ans = bfs();
if (ans == -1) {
printf("No solution!\n");
continue;
}
else
printf("%d\n", ans);
}
return 0;
}
2014_3_29_周赛 马腿上的最短路相关推荐
- highcharts 怎么去掉鼠标悬停效果_腿上肥胖纹怎么去掉 大腿肥胖纹怎么消除
可能很多人都会有短期内体重波动过大的情况,这种情况下身体身体产生的纹路,就是肥胖纹.身体最容易出现纹路的部位就是腿部,那么,大腿肥胖纹怎么消除 腿上肥胖纹怎么去掉呢?下面为大家分享了去除肥胖纹方法,大 ...
- 亚马逊的vps多少钱一个月_如何查看您在亚马逊上花了多少钱
亚马逊的vps多少钱一个月 Have you ever wondered how much you've spent at Amazon during your lifetime? Whether y ...
- 为什么这款 CPU 在亚马逊上卖得最火?
AMD锐龙5 3600评测:为什么这款CPU是亚马逊上卖得最火的CPU? 作者 | Ian Cutress 译者 | 弯月,责编 | 郭芮 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID ...
- 20200926:(leetcode207周周赛题解(上))
leetcode207周周赛题解(上) 题目 思路与算法 代码实现 写在最后 题目 1.1592. 重新排列单词间的空格 2.1593. 拆分字符串使唯一子字符串的数目最大 思路与算法 第一题注意分割 ...
- 20200920:leetcode35周双周赛题解(上)
leetcode35周双周赛题解(上) 题目 思路与算法 代码实现 写在最后 题目 1.5503. 所有奇数长度子数组的和 2.5505. 所有排列中的最大和 思路与算法 第一题暴力就行了,看了很多大 ...
- 20200814:力扣201周周赛题解记录上
力扣201周周赛题解记录上 题目 思路与算法 代码实现 写在最后 题目 整理字符串 找出第 N 个二进制字符串中的第 K 位 思路与算法 第一题这种类似消消乐的东西都是直接用栈来实现的,注意代码细节 ...
- 亚马逊视频下载用什么工具:试试专业亚马逊视频下载器-Tuneboto Amazon Video Downloader中文版 | 亚马逊上的视频怎么下载?
Tuneboto Amazon Video Downloader 是一款优秀的一站式高速亚马逊视频下载器软件,拥有直观简洁的用户界面和超强的亚马逊视频解析下载能力,可以帮助用户将任何Amazon Pr ...
- 网聊是不是就要劈腿上床?
网聊是不是就要劈腿上床? 人生是一场电影,我们花大半个人生去编写结局,到头来都是THE END: 人生是一场游戏,我们需要不断有兴致地去玩耍,可是游戏总有结束的时候: 人生是一盘跳棋,不是你输就是我赢 ...
- 武汉星起航:深度剖析个人卖家在亚马逊上开店的流程
亚马逊是一个比较受欢迎的跨境电商平台,部分卖家想在亚马逊上开店,但是不知道开店流程.下面星起航将为大家介绍一下个人卖家怎么在亚马逊上开店,主要包括以下几个步骤: 创建亚马逊账户:访问亚马逊官网,点击[ ...
最新文章
- python安装的模块在pycharm中能用吗_pycharm内无法import已安装的模块问题解决
- 不同品牌发电机组间的并机知识
- 《好未来编程题》 输入n个整数,输出出现次数大于等于数组长度一半的数
- 详述 IntelliJ IDEA 插件的安装及使用方法
- GridView调用setAdapter()函数时发生错误
- html固定表的属性是什么,css如何固定表头
- Android的面孔_Actiyity
- raspberry pi_探索Raspberry Pi Sense HAT
- java接口回调测试
- Auto.js 如何WIFI连接VS Code插件
- 凑热闹买了个小米剃须刀
- 计算机网络 | 无盘工作站的建立
- 截图工具FastStone Capture
- 语音信号处理基础知识之频谱、相位谱、幅度谱、功率谱及语谱图
- verilog实现N分频电路
- mysql查询1999年后出生的_饭后笑笑 1999年出生的和2000年出生的秘密
- 新手安装arch安装界面wifi-menu连接不了wifi
- 年会抽奖程序,基于 Express + Three.js的 3D 球体抽奖程序
- 计算机格式化没有fat32,无需格式化 U盘FAT32转NTFS格式教程
- c语言判断一个数独是否合法,判断数独是否合法
热门文章
- SRPG游戏开发(二十三)第七章 寻路与地图对象 - 一 A*寻路算法(A* Search Algorithm)
- warning LNK4099: 未找到 PDB“vc120.pdb”(使用“dataserialize.lib(Data_processor.obj)”或在“E:\Santint\Santint_B
- 007.斐波拉契查找算法
- VSCode写leetcode
- mysql strlen 函数_sizeof和strlen函数区别
- 学python的第十八天
- 简单的条件概率乘积推导证明:p(c|a,b)p(b|a)=p(b,c|a)
- 我的第一篇文章,doc命令
- 实现android按键震动按键声音的机制
- Sanitize小知识