| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
第三次AC,纪念!贡献了四次WA#include <iostream>
using namespace std;
const int MAX_SIZE = 305;
int size;
int dir[8][2] = {{-1, -2},{-1, 2},{-2, -1},{-2, 1},{1, -2},{1, 2},{2, -1},{2, 1}};
int map[MAX_SIZE][MAX_SIZE] = {0};
typedef struct
{
int x;
int y;
int step;
}Point;
typedef struct
{
Point visited[90001];
int front;
int rear;
}Queue;
int bfs(Point start, Point end)
{
Queue queue = {{0}, 0, 0};
memset(map, 0, sizeof(map));
queue.visited[0].x = start.x;
queue.visited[0].y = start.y;
queue.visited[0].step = 0;
queue.rear++;
map[start.x][start.y] = 1;
if(start.x == end.x && start.y == end.y) return 0;
while(queue.front < queue.rear)
{
//if(queue.visited[queue.front].x == end.x && queue.visited[queue.front].y == end.y) break;
for(int i = 0; i < 8; i++)
{
int xx = queue.visited[queue.front].x + dir[i][0];
int yy = queue.visited[queue.front].y + dir[i][1];
if(xx >= 0 && xx < size && yy >= 0 && yy < size && map[xx][yy] == 0)
{
queue.visited[queue.rear].x = xx;
queue.visited[queue.rear].y = yy;
queue.visited[queue.rear].step = queue.visited[queue.front].step + 1 ;
queue.rear++;
map[xx][yy] = 1;
if(queue.visited[queue.rear - 1].x == end.x && queue.visited[queue.rear - 1].y == end.y)
{
return queue.visited[queue.rear-1].step;
}
}
}
queue.front++;
}
return 0;
}
int main()
{
Point start, end;
int num;
int result = 0;
freopen("input.txt","r", stdin);
//setbuf(stdout, NULL);
scanf("%d", &num);
while(num--)
{
cin >> size;
if(size < 4) return 0;
cin >> start.x >> start.y;
cin >> end.x >> end.y;
result = bfs(start, end);
cout <<result <<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator