| ||||||||||
| 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 | |||||||||
贡献了十几次的WA代码,求大神帮忙看一下。。。#include<iostream>
#include<queue>
using namespace std;
int step;
int rear, top, L;
class Point{
protected:
int x;
int y;
public:
int step;
Point(int i = -1, int j = -1)
{
this->x = i;
this->y = j;
this ->step = 0;
}
void reset(){
x = -1;
y = -1;
step = 0;
}
int getx(){return this->x;}
int gety(){return this->y;}
int gets(){return this ->step;}
bool operator==(Point pointy)
{
if(this->x == pointy.x && this->y == pointy.y)
return true;
else
return false;
}
void setS(int i){this ->step = i;}
};
Point point[8];
Point Aqueue[999999]; //数组开的小一点就RE,大一点就WA
bool vis[305][305];
//int step[200];
void move(Point start, int L){
int x = start.getx();
int y = start.gety();
if( x + 1 < L )
{
if(y - 2 >= 0)
point[0]= Point(x+1,y-2);
if(y+2 < L)
point[1] = Point(x+1, y+2);
}
if( x - 1 >= 0 )
{
if(y - 2 >= 0)
point[2]= Point(x-1,y-2);
if(y+2 < L)
point[3] = Point(x-1, y+2);
}
if(x +2 < L)
{
if(y - 1 >= 0)
point[4]= Point(x+2,y-1);
if(y+1 < L)
point[5] = Point(x+2, y+1);
}
if(x -2 >= 0)
{
if(y-1 >= 0)
point[6] = Point(x-2, y-1);
if(y+1 < L)
point[7] = Point(x-2, y+1);
}
}
bool bfs(Point pointx, Point pointy){
int i;
while(rear > top){
Point state = Aqueue[top ++];
if(state == pointy)
{
cout << state.gets()<<endl;
return true;
}
move(state, L);
for(i = 0; i < 8; i++)
{
if( point[i].getx() != -1 && point[i].gety() !=-1 && !vis[point[i].getx()][point[i].gety()] )
{
//state.step = point[i].gets() + 1;
point[i].setS( state.gets()+1 );
Aqueue[rear++] = point[i];
vis[point[i].getx()][point[i].gety()] = true;
}
}
}
return false;
}
int main(){
int N, x, y, i;
rear = 0;
top = 0;
cin >> N;
while(N--){
memset(vis, false, sizeof(vis));
memset(Aqueue, 0, sizeof(Aqueue));
cin >> L;
cin >> x >> y;
vis[x][y] = true;
Point pointx = Point(x, y);
cin >> x >> y;
Point pointy = Point(x, y);
for(i = 0; i < 8; i++)
point[i].reset();
Aqueue[rear++] = pointx;
bfs(pointx, pointy);
}
return 1;
//system("pause");
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator