hrbust 1181 移动【邻接阵,bfs】
2012-10-31 23:36
495 查看
#include<stdio.h> #include<string.h> #define INF 0xfffffff struct point { int x; int y; }; int step[301][301]; struct point que[30000001]; int main() { struct point p1, p2; while(scanf("%d %d %d %d", &p1.x, &p1.y, &p2.x, &p2.y) != EOF) { // memset(step, 0, sizeof(step)); for(int i = 0; i <= 300; i++) { for(int j = 0; j <= 300; j++) { step[i][j] = INF; } } step[p1.x][p1.y] = 0; struct point *qb, *qe; qb = qe = que; qe->x = p1.x; qe->y = p1.y; qe++; while(qb < qe) { struct point *tmp = qb++; if(tmp->x + 2 >= 0 && tmp->x + 2 <= 300 && tmp->y - 1 >= 0 && tmp->y - 1 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x + 2][tmp->y - 1]) { step[tmp->x + 2][tmp->y - 1] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x + 2; qe->y = tmp->y - 1; qe++; } if(tmp->x + 2 >= 0 && tmp->x + 2 <= 300 && tmp->y + 1 >= 0 && tmp->y + 1 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x + 2][tmp->y + 1]) { step[tmp->x + 2][tmp->y + 1] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x + 2; qe->y = tmp->y + 1; qe++; } if(tmp->x - 2 >= 0 && tmp->x - 2 <= 300 && tmp->y - 1 >= 0 && tmp->y - 1 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x - 2][tmp->y - 1]) { step[tmp->x - 2][tmp->y - 1] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x - 2; qe->y = tmp->y - 1; qe++; } if(tmp->x - 2 >= 0 && tmp->x - 2 <= 300 && tmp->y + 1 >= 0 && tmp->y + 1 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x - 2][tmp->y + 1]) { step[tmp->x - 2][tmp->y + 1] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x - 2; qe->y = tmp->y + 1; qe++; } if(tmp->x + 1 >= 0 && tmp->x + 1 <= 300 && tmp->y + 2 >= 0 && tmp->y + 2 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x + 1][tmp->y + 2]) { step[tmp->x + 1][tmp->y + 2] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x + 1; qe->y = tmp->y + 2; qe++; } if(tmp->x - 1 >= 0 && tmp->x - 1 <= 300 && tmp->y + 2 >= 0 && tmp->y + 2 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x - 1][tmp->y + 2]) { step[tmp->x - 1][tmp->y + 2] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x - 1; qe->y = tmp->y + 2; qe++; } if(tmp->x + 1 >= 0 && tmp->x + 1 <= 300 && tmp->y - 2 >= 0 && tmp->y - 2 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x + 1][tmp->y - 2]) { step[tmp->x + 1][tmp->y - 2] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x + 1; qe->y = tmp->y - 2; qe++; } if(tmp->x - 1 >= 0 && tmp->x - 1 <= 300 && tmp->y - 2 >= 0 && tmp->y - 2 <= 300 && step[tmp->x][tmp->y]+1 < step[tmp->x - 1][tmp->y - 2]) { step[tmp->x - 1][tmp->y - 2] = step[tmp->x][tmp->y] + 1; qe->x = tmp->x - 1; qe->y = tmp->y - 2; qe++; } } printf("%d\n", step[p2.x][p2.y]); } return 0; }
题目连接:http://acm.hrbust.edu.cn/index.php?m=Status&a=showCode&run_id=44125
相关文章推荐
- HRBUST 1316 移动 II 广搜(bfs)+路径打印
- Hrbust oj 1316 移动 II——BFS(广度优先搜索)
- 一维坐标的移动(基础BFS)(待补)
- 蓝桥杯-算法提高 学霸的迷宫(BFS-倒向追踪输出移动方向)
- Hrbust 1143 (bfs)
- hdoj 1181 变形课 【bfs】
- hrbust/哈理工oj 1617 回家【BFS+BFS】
- HDOJ 1181 变形课(邻接表+DFS或BFS)
- 【HDU 1181】变形课(BFS)
- 邻接图的广度优先搜索(BFS)
- BFS 骑士的移动
- poj 1915 bfs(骑士移动)
- BZOJ1054 移动玩具 BFS+hash
- hrbust1444 逃脱 【BFS】
- 图练习-BFS-从起点到目标点的最短步数(sdut 2830)邻接边表
- uva 439骑士的移动(图的最短路 bfs)
- BZOJ 1054: [HAOI2008]移动玩具( BFS )
- HNCU1101:马的移动(BFS)
- 【BFS】HRBUST 1942 this is bad problom
- 邻接图的广度优先搜索(BFS)