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 <fstream> using namespace std; #define SIZE 52 #define QUEUE_SIZE 10000 const int direct [][2] = { -1,0, 0,1, 1,0, 0,-1}; bool map[SIZE][SIZE],visited[SIZE][SIZE][4]; int m,n; int endx,endy; struct Pos { int x,y,dir; int cost; }; Pos queue[QUEUE_SIZE]; int rear,front; int push (int x,int y,int dir,int cost) { // if success if (x == endx && y == endy) { return 1; } if (visited[x][y][dir]) { return 0; } visited[x][y][dir] = true; queue[front].x = x; queue[front].y = y; queue[front].dir = dir; queue[front].cost = cost; front++; front %= QUEUE_SIZE; return 0; } void pop (int &x,int &y,int &dir,int &cost) { x = queue[rear].x; y = queue[rear].y; dir = queue[rear].dir; cost = queue[rear].cost; rear ++; rear %= QUEUE_SIZE; } int turn (int x,int y,int dir,int cost) { if ( 1 == push (x,y,(dir + 3) % 4,cost + 1)) { return 1; } if ( 1 == push (x,y,(dir + 5) % 4 ,cost + 1)) { return 1; } return 0; } int go (int x,int y,int dir,int cost) { int i; for (i = 1;i <= 3;i++) { x += direct[dir][0]; y += direct[dir][1]; //printf ("p go %d %d\n",x,y); if (x < m && y < n && x >= 0 && y >= 0 && map[x][y]) { //printf ("go %d %d\n",x,y); if (1 == push (x,y,dir,cost + 1)) { return 1; } } else { break; } } return 0; } int BFS (int begx,int begy,int direction) { int x,y,dir,cost,i; int tmp; if (1 == push (begx,begy,direction,0)) { return 0; } while (front != rear) { //printf ("get\n"); pop (x,y,dir,cost); // if (1 == turn (x,y,dir,cost)) { return cost + 1; } if (1 == go (x,y,dir,cost)) { return cost + 1; } } return -1; } void init () { int i,j; for (i = 0;i < m;i++) { for (j = 0; j < n;j++) { map[i][j] = true; visited[i][j][0] = visited[i][j][1] = visited[i][j][2] = visited[i][j][2] = false; } } front = rear = 0; } int main () { #ifndef ONLINE_JUDGE freopen ("Robot.txt","r",stdin); #endif int m1,n1,tmp; int i,j; int begx,begy,dir; char buff[10]; while (EOF != scanf ("%d%d",&m1,&n1) && !( 0 == m1 && n1 == 0)) { m = m1 + 1; n = n1 + 1; init (); for (i = 0; i < m1; i++) { for (j = 0; j < n1; j++) { scanf ("%d",&tmp); if (tmp == 1) { map[i + 1][j + 1] = map [i][j + 1] = map[i][j] = map[i + 1][j] = false; } } } scanf ("%d%d%d%d%s",&begx,&begy,&endx,&endy,buff); switch (buff[0]) { case 's' : dir = 2;break; case 'n' : dir = 0;break; case 'w' : dir = 3;break; case 'e' : dir = 1;break; } printf ("%d\n",BFS (begx,begy,dir)); } #ifndef ONLINE_JUDGE printf ("end\n"); while (true) {} #endif return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator