SDNU OJ 1025 马踏飞燕
来源:互联网 发布:淘宝跨店凑单怎么弄 编辑:程序博客网 时间:2024/06/11 10:00
该题是一道使用BFS(广度优先搜索)的经典题目(当让如果您不怕麻烦,DFS也是可以的), 思路很简单,用queue存下各个情况每次都判断是否踏到燕子,并且记得记录深度。
Description
无聊的陶陶准备编写一款游戏,名字就叫做“马踏飞燕”,在这款游戏中有个一个100*100的坐标,把马放在任意一个坐标点,再把燕子放在任意一个坐标点,并且燕子不会移动,马只能按照象棋规则走“日”。若4步之内能“踏”到燕子,则成功。笨蛋的陶陶不知道该怎么去写,现在请你帮助他。
走“日”说明:当马的坐标为(5,5)的时候,马下一步可以走的坐标有8个点,分别为(4,3)(6,3)(3,4)(7,4)(3,6)(7,6)(4,7)(6,7)
走“日”说明:当马的坐标为(5,5)的时候,马下一步可以走的坐标有8个点,分别为(4,3)(6,3)(3,4)(7,4)(3,6)(7,6)(4,7)(6,7)
Input
第一行两个整数,马的起始坐标x,y (0<x,y<100)
第一行两个整数,燕子的坐标m,n (0<m,n<100)
第一行两个整数,燕子的坐标m,n (0<m,n<100)
Output
若4步之内能“踏”到燕子,则输出“Y”
若4步之内不能“踏”到燕子,则输出“N”
若4步之内不能“踏”到燕子,则输出“N”
Sample Input
5 57 4
Sample Output
Y
代码如下:
#include<cstdio>#include<iostream>#include<queue>#include<algorithm>
using namespace std;
int sun[8][2] = {2,1, 2,-1, 1,2, 1,-2, -2,1, -2,-1 ,-1,2, -1,-2};bool getyan = 0;bool sec[105][105];int i, j;struct horse{ int heng; int shu; int step;};void BFS(int x, int y){ queue<horse> GG; GG.push(horse{x, y, 0}); while(!GG.empty()){ horse m = GG.front(); GG.pop(); if(sec[m.heng][m.shu] != 1){ sec[m.heng][m.shu] = 1; if(m.heng == i && m.shu == j){ getyan = 1; break; } for(int jump = 0;jump < 8;jump++){ int h = m.heng + sun[jump][0]; int s = m.shu + sun[jump][1]; if(h <= 100 && h >= 1 && s <= 100 && s >= 1 && m.step <= 3){ GG.push(horse{h, s, m.step + 1}); } } } } while(!GG.empty()) GG.pop();}int main(){ int a, b; while(scanf("%d %d", &a, &b) != EOF){ scanf("%d %d", &i, &j); BFS(a, b); if(getyan) cout << 'Y' << endl; else cout << 'N' << endl; memset(sec, 0, sizeof(sec)); getyan = 0; } return 0;}
阅读全文
0 0
- SDNU OJ 1025 马踏飞燕
- sdnu 1027.马踏飞燕(续)
- SDNU 1027 马踏飞燕序
- SDNU 1027 马踏飞燕(续) 【BFS】
- 马踏飞燕(SDNU ACM-ICPC 2011复赛(2010级))
- 马踏飞燕(续)
- SDNU__1025.马踏飞燕
- 【ACM】----SDNU-OJ 1206
- SDNU OJ 1182 奖学金
- SDNU OJ 1182奖学金
- SDNU OJ 1105 椭圆
- SDNU OJ 1036 四舍五入
- sdnu oj 1182 奖学金
- sdnu oj 1099 前缀判断
- SDNU OJ 1060.找第K大数
- sdnu oj 1041 任意进制转换
- sdnu oj 1056 A ^ B Problem
- sdnu oj 1125 Let the Balloon Rise
- Map集合的四种遍历方式总结
- JS获取地址栏参数
- bzoj1104 [POI2007]洪水pow
- 深入理解java垃圾回收机制
- Java内存管理原理及内存区域详解
- SDNU OJ 1025 马踏飞燕
- 百度地图api 热力图上 清空指定区的覆盖物(轮廓)的另一思路
- CCF 201409-4 最优配餐
- Cookie和Session详解
- 算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
- cmd常用命令
- uva272 (TeX)
- Caffe系列之常用层
- 几个面试经典算法题Java解答