hrbust 移动(宽度优先搜索)
2012-10-09 21:43
369 查看
Description |
在平面坐标系内,有两个坐标轴x轴和y轴。(x,y)表示点的坐标。 有一点处于(x1,y1)位置上,他可以向相临8个位置移动(移动方式见下图)。 ![]() 划定范围:此点只可以在[0<=x<=300,0<=y<=300]范围内移动。 要求:给出起始位置(x1,y1)和目标位置(x2,y2),要求同学求出从起始位置移动到目标位置所需的最少次数。 |
Input |
输入包括多组测试用例。 对于每组测试用例,包含4个正整数,x1,y1,x2,y2,范围均为[0,300]。 |
Output |
输出移动所需的最少次数。 |
Sample Input |
0 0 1 2 0 0 2 1 |
Sample Output |
1 1 #include<stdio.h> #include<string.h> int s[301][301]; int v[301][301]; int step[301][301]; int f[16]={-1,-2,-2,-1,1,2,2,1,-2,-1,1,2,2,1,-1,-2}; struct no { int x,y; }q[100001]; int main() { int front,rear,i,j,t,n,xx,yy,x0,y0,x1,y1; while(scanf("%d%d%d%d",&x0,&y0,&xx,&yy)!=EOF) { n=301; memset(v,0,sizeof(v)); memset(step,0,sizeof(step)); front=rear=0; q[rear].x=x0; q[rear++].y=y0; v[x0][y0]=1; while(front<rear) { for(i=0;i<8;i++) { x1=q[front].x+f[i]; y1=q[front].y+f[i+8]; if(x1>=0&&x1<n&&y1>=0&&y1<n&&(!v[x1][y1])) { q[rear].x=x1; q[rear++].y=y1; v[x1][y1]=1; step[x1][y1]=step[q[front].x][q[front].y]+1; if(v[xx][yy]) break; } } front++; } printf("%d\n",step[xx][yy]); } return 0; } |
相关文章推荐
- 宽度优先搜索练习(三)
- 利用图的宽度优先搜索(层次遍历)实现查找从迷宫左上
- 【深度优先搜索算法】与【宽度优先搜索算法】
- 宽度优先搜索 最短路径
- BFS宽度优先搜索思想
- 宽度优先搜索
- 多叉树的宽度优先搜索BFS
- 【算法入门】广度/宽度优先搜索(BFS)
- NYOJ 坦克大战(宽度优先搜索)
- 宽度优先搜索(记录路径)
- 【算法入门】广度/宽度优先搜索(BFS)
- 【算法入门】广度/宽度优先搜索(DFS)
- 二叉树 深度优先搜索 宽度优先搜索
- FZU 1408 位图(宽度优先搜索)
- 宽度优先搜索BFS算法
- 用linkedList实现队和宽度优先搜索
- 广度/宽度优先搜索(BFS)
- 【算法入门】广度/宽度优先搜索(DFS)
- 青蛙跳水杯(蓝桥杯)--宽度优先搜索
- 【算法入门】广度/宽度优先搜索(BFS)