POJ 1915 Knight Moves
2011-08-22 20:53
357 查看
POJ_1915[/b]
这个题目跟POJ_2243是非常相似的,只不过棋盘的大小是变化的而已。在读起点与终点之后,只需要从起点开始,对周围8个可达的位置进行广搜并依次记录到达该位置时的步数,当搜到终点的时候退出循环即可。
这个题目跟POJ_2243是非常相似的,只不过棋盘的大小是变化的而已。在读起点与终点之后,只需要从起点开始,对周围8个可达的位置进行广搜并依次记录到达该位置时的步数,当搜到终点的时候退出循环即可。
#include<stdio.h> #include<string.h> int vis[310][310],dis[310][310],qx[90010],qy[90010]; int dx[]={1,2,2,1,-1,-2,-2,-1},dy[]={2,1,-1,-2,-2,-1,1,2}; int main() { int i,j,k,L,n,front,rear,sx,sy,tx,ty,x,y,newx,newy; scanf("%d",&n); while(n--) { scanf("%d",&L); scanf("%d%d",&sx,&sy); scanf("%d%d",&tx,&ty); for(i=0;i<L;i++) for(j=0;j<L;j++) vis[i][j]=0; front=rear=0; qx[rear]=sx; qy[rear]=sy; rear++; vis[sx][sy]=1; dis[sx][sy]=0; while(front<rear) { x=qx[front]; y=qy[front]; front++; if(x==tx&&y==ty) break; for(i=0;i<8;i++) { newx=x+dx[i]; newy=y+dy[i]; if(!vis[newx][newy]&&newx>=0&&newx<L&&newy>=0&&newy<L) { vis[newx][newy]=1; dis[newx][newy]=dis[x][y]+1; qx[rear]=newx; qy[rear]=newy; rear++; } } } printf("%d\n",dis[tx][ty]); } return 0; }
相关文章推荐
- POJ 1915 Knight Moves
- poj1915 Knight Moves 双向广度搜索
- (POJ - 1915)Knight Moves
- POJ 1915 Knight Moves
- poj 1915 Knight Moves
- POJ 1915 Knight Moves
- POJ-1915 Knight Moves
- Poj1915 Knight Moves
- POJ_1915_Knight Moves
- poj 1915 Knight Moves
- POJ 1915 BFS-Knight Moves
- day6 POJ 1915 Knight Moves
- POJ-1915 Knight Moves 简单搜索
- poj 1915 Knight Moves
- poj1915 Knight Moves
- poj 1915 Knight Moves
- POJ 1915 Knight Moves
- POJ 1915 Knight Moves
- poj1915 -- Knight Moves
- poj 1915 Knight Moves