sdnu 1027.马踏飞燕(续)
来源:互联网 发布:fifa online3网络错误 编辑:程序博客网 时间:2024/06/12 01:29
原题链接: http://210.44.14.31/problem/show/1027
考查BFS。
思路:以起点为根,逐渐向外扩展。
关键点:怎样维护你走的第几步。
有两种方法:
1.棋盘int,结点pair:可以用棋盘来维护,
上一步棋盘位置的步数+1=下一步棋盘位置的步数。
2.棋盘bool,结点struct :可以用结点来维护,就像一棵树,起始点是根,
每次BFS便往外扩展一圈,所以child的步数=parent的步数+1。
(struct里面设第三个变量记录步数)
代码如下(第一种方法):
#include<iostream>#include<queue>#include<utility>#include<cstring>#include<cstdio>using namespace std;int qp[2001][2001];int main(){int nextx[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };int nexty[8] = {-2,-1, 1, 2, 2, 1, -1, -2 };int x, y, m, n;memset(qp, 0, sizeof(qp));pair<int, int>pa;queue<pair<int, int> >q;scanf_s("%d%d%d%d", &x, &y, &m, &n);pa.first = x; pa.second = y;q.push(pa);while (!q.empty()){pair<int, int>temp = q.front();q.pop();if (qp[temp.first][temp.second] <= 199)//200步就不用走了{for (int i = 0; i < 8; i++){pa.first = temp.first + nextx[i]; pa.second = temp.second + nexty[i];if (pa.first >= 0 && pa.first < 2000 && pa.second >= 0 && pa.second < 2000){if (pa.first == m&&pa.second == n)//找到直接跳出循环goto end;if (qp[pa.first][pa.second] == 0)//若该点没走过则赋值{qp[pa.first][pa.second] = qp[temp.first][temp.second] + 1;q.push(pa);}}}}}cout << "N" << endl;return 0;end: cout << "Y" << endl;return 0;}
0 0
- sdnu 1027.马踏飞燕(续)
- SDNU 1027 马踏飞燕(续) 【BFS】
- SDNU OJ 1025 马踏飞燕
- SDNU 1027 马踏飞燕序
- 马踏飞燕(续)
- 马踏飞燕(SDNU ACM-ICPC 2011复赛(2010级))
- SDNU__1025.马踏飞燕
- 飞燕集(脱单)
- 飞燕围棋文件加密算法
- sdnu 1060
- sdnu 1069
- sdnu 1079
- sdnu 1362
- sdnu 1274
- sdnu 1138
- sdnu 1318
- sdnu 1315
- sdnu 1010
- Maximum sum-动态规划
- 数组作为实参和形参的形式是怎样的?zhidao.baidu.com/link?url=owojlL0OUiAYU50L9g86kmo5AToWjv42ZQo9WN0HhtvHzGbcU7etRbJ69
- 实用软件程序包包含的头文件
- [leetcode] 215.
- 栈--POJ 1363
- sdnu 1027.马踏飞燕(续)
- java编程思想——抽象类
- 用jdbc向数据库插入数据后获取生成的主键值
- iOS js oc相互调用(JavaScriptCore)
- 什么是遥感模型,什么事反演
- HDU_4004_TheFrog'sGames
- Cookie的使用小结
- 机器学习算法原理与实践(五)、GMM与K-means的那些事
- FZU2141 Sub-Bipartite Graph 贪心