POJ1915(Knight Moves)

题目链接

宽度优先搜索。

View Code
 1 #include <stdio.h>
 2 #include <memory.h>
 3 #include <queue>
 4 #define N 300
 5 using namespace std;
 6 typedef pair<int,int> node;
 7 queue<node> Q;
 8 int dx[8]={1,1,-1,-1,2,2,-2,-2};
 9 int dy[8]={2,-2,2,-2,1,-1,1,-1};
10 int n;
11 int step[N][N];
12 int si,sj,ei,ej;
13 int bfs()
14 {
15   int i,j,ni,nj,d;
16   node pos;
17   memset(step,0,sizeof(step));
18   while(!Q.empty()) Q.pop();
19   Q.push(make_pair(si,sj));
20   step[si][sj]=1;
21   while(!Q.empty())
22   {
23     pos=Q.front(),Q.pop();
24     i=pos.first;
25     j=pos.second;
26     for(d=0;d<8;d++)
27     {
28        ni=i+dx[d],nj=j+dy[d];
29        if(ni<0 || nj<0 || ni>=n || nj>=n || step[ni][nj])  continue;
30        step[ni][nj]=step[i][j]+1;
31        if(ni==ei && nj==ej) return step[i][j];
32        Q.push(make_pair(ni,nj));
33      }
34   }
35 }
36 int main()
37 {
38   int t;
39   scanf("%d",&t);
40   while(t--)
41   {
42     scanf("%d%d%d%d%d",&n,&si,&sj,&ei,&ej);
43     if(si==ei && sj==ej)  printf("0\n");
44     else  printf("%d\n",bfs());
45   }
46   return 0;
47 }

 

posted @ 2012-04-25 14:27  BeatLJ  阅读(199)  评论(0编辑  收藏  举报