标签:
呵呵,好简单。。。
#include<iostream> #include<queue> using namespace std; queue <int> x; queue <int> y; int m,n,opx,opy,edx,edy,f[110][110]; int bfs() { if((x.empty()) || (y.empty())) { cout<<"no"; exit(0); } int x1=x.front(),y1=y.front(); x.pop(); y.pop(); if((x1==edx) && (y1==edy)) { cout<<"yes"; exit(0); } if((f[x1][y1]==0) && (x1<n) && (x1>=0) && (y1<m) && (y1>=0)) { f[x1][y1]=1; x.push(x1+2); y.push(y1-1); x.push(x1+2); y.push(y1+1); x.push(x1+1); y.push(y1+2); x.push(x1+1); y.push(y1-2); } bfs(); } int main() { cin>>n>>m>>opx>>opy>>edx>>edy; x.push(opx); y.push(opy); bfs(); }
跳马问题 |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
我们知道在中国象棋的棋盘上,马走日字行的(如下图所示),现在有一个 N*M 的方格棋盘,给定两个点的坐标 A(a1,b1) 和 B(a2,b2),问按照马走日字的规则,再附加一条马只能望右跳,问能否实现从 A 点走到 B 点。 |
输入
|
两行,第一行包含两个数 N 和 M,第二行包括四个数分别为 a1,b1,a2 和 b2。各行的数两两之间用一个空格分隔。
|
输出
|
yes 或 no
|
输入示例
|
8 8
0 0 3 3 |
输出示例
|
yes
|
其他说明
|
数据范围:1 < N,M < 100, 0 <= a1,a2 <= M-1,0 <= b1,b2 <= N-1.
|
标签:
原文地址:http://www.cnblogs.com/ysmor/p/5684277.html