poj1022

来源:互联网 发布:知豆新能源汽车logo 编辑:程序博客网 时间:2024/05/16 10:32
 

骑士

Time Limit:2000MS  Memory Limit:65536K
Total Submit:92 Accepted:18

Description

_____________________
1|_|_|_|_|_|_|_|_|_|_|
2|_|_|_|_|_|_|_|_|_|_|
3|_|_|_|_|P|_|P|_|_|_|
4|_|_|_|P|_|_|_|P|_|_|
5|_|_|_|_|_|I|_|_|_|_|
6|_|_|_|P|_|_|_|P|_|_|
7|_|_|_|_|P|_|P|_|_|_|
8|_|_|_|_|_|_|_|_|F|_|
9|_|_|_|_|_|_|_|_|_|_|
1 2 3 4 5 6 7 8 9 10

(ps:把这个图复制到记事本中更好看)

如上图所示,给出一个 9x10 的棋盘,骑士的初始位置在 I,他可以跳到标记为 P 的地方。现在,骑士有了一个任务,去消灭一个入侵者,他希望用最少的步数完成这个任务。例如在上图中,标记为 F 的地方即为入侵者所在的地方,骑士走到那里至少需要 2 步。

Input

第一行是地图的个数 n;
接下来包含 n 个测试数据,每个测试数据的格式如下:
row col
irow icol
frow fcol
分别表示:
地图的行数和列数,行和列的标号从 1 开始。
骑士最开始所在行和列。
入侵者所在的行和列。
所有输入数据均为整数且小于等于 500,且保证骑士可以跳到入侵者所在的位置。

Output

每个测试用例输出一行,即骑士需要走的最少的步数。

Sample Input

29 105 68 99 105 68 9

Sample Output

22
 
#include<iostream>
#include<cstdio>
using namespace std;
int qu[250001][3],flag[510][510],qs,qe;
int irow,icol,row,col,frow,fcol;
int bfs()
{
    int i,k[8][2]={{-1,2},{-1,-2},{1,2},{1,-2},{2,-1},{-2,-1},{-2,1},{2,1}};
    int x,y;
    while(1)   
    {
     for(i=0;i<8;i++)
    {
     x=qu[qs][0]+k[i][0];
     y=qu[qs][1]+k[i][1];
     if(x>0&&x<=row&&y>0&&y<=col&&flag[x][y]==0)
     {
      qu[qe][0]=x;
      qu[qe][1]=y;
      flag[x][y]=1;
      if(x==frow&&y==fcol)   return qu[qs][2]+1;
      qu[qe++][2]=qu[qs][2]+1;
     }
    }
       qs++;
    }
}
int main()
{
    int n,i;
    cin>>n;
    for(i=0;i<n;i++)
    {
         qs=qe=0;          
         cin>>row>>col;
         cin>>irow>>icol;
         cin>>frow>>fcol;
         memset(flag,0,sizeof(flag));
         qu[qe][0]=irow;
         qu[qe][1]=icol;
   qu[qe++][2]=0;
         flag[irow][icol]=1;
   if(irow==frow&&icol==fcol)
    cout<<'0'<<endl;
   else
   {
             cout<<bfs()<<endl;              
   }
    }
    return 0;
}
 
这道题让我折腾了一天,结果是中间的一个变量名写错了,我居然会被这样的错误
耗费一天的时间,这是什么样的状态啊,还想进ACM队,被T了活该,,,,,,真受不了
自己,专心点不行吗,为什么老是发呆,,,,,,唉,真够无语的!!!!!!