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 }

 

你可能感兴趣的:(move)