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<stdio.h> #include <stdlib.h> #include "queue" using namespace std; #define LEN 42//最外层不通 typedef struct { int x,y; int dx,dy; int layer; } NODE; char maze[LEN][LEN]; int w,h; int ln,rn,sn; void ini_maze(int *sx , int *sy) { int i,j; for(i=0;i < LEN ; i++) for(j=0; j < LEN ; j++) maze[i][j]='#'; for(i=1; i<=h; i++) { for(j=1; j<=w; j++) { scanf("%c",&maze[j][i]); if('S' == maze[j][i]) { *sx = j; *sy = i; } } } ln = 1; rn =1; sn = 5001; } void find_sway(int x, int y, int dx, int dy , int layer) { int lres = -1, rres = -1, mres = -1; NODE nod,td; queue<NODE> qlist; x += dx; y += dy; while(maze[x][y] != 'E') { if( maze[x+dy][y-dx] != '#') //向左 { nod.dx = dy; nod.dy = -dx; nod.x = x; nod.y = y; nod.layer = layer+1; qlist.push(nod); if(maze[x+dy][y-dx] != 'E') maze[x+dy][y-dx] = '#'; } if( maze[x-dy][y+dx] != '#') //向右 { nod.dx = -dy; nod.dy = dx; nod.x = x; nod.y = y; nod.layer = layer+1; qlist.push(nod); if(maze[x-dy][y+dx] != 'E') maze[x-dy][y+dx] = '#'; } if( maze[x+dx][y+dy] != '#') //向前 { nod.dx = dx; nod.dy = dy; nod.x = x; nod.y = y; nod.layer = layer+1; qlist.push(nod); if(maze[x+dx][y+dy] != 'E') maze[x+dx][y+dy] = '#'; } td = qlist.front(); x = td.x + td.dx; y = td.y + td.dy; dx = td.dx; dy = td.dy; layer = td.layer; qlist.pop(); } sn = layer; } int find_lway(int x, int y, int dx, int dy , int layer) { int lres = -1, rres = -1, mres = -1; ln++; x += dx; y += dy; if( maze[x][y] == 'E') { return layer; } if( maze[x+dy][y-dx] != '#') //向左 { lres = find_lway(x,y,dy,-dx,layer+1); if(lres == -1) ln++; } if(lres == -1) { if( maze[x+dx][y+dy] != '#') //向前 { mres = find_lway(x,y,dx,dy,layer+1); if(mres == -1) ln++; } if(mres == -1) { if( maze[x-dy][y+dx] != '#') //向右 { rres = find_lway(x,y,-dy,dx,layer+1); if(rres == -1) ln++; } if(rres == -1) { return -1; } } } return 0; } int find_rway(int x, int y, int dx, int dy , int layer) { int lres = -1, rres = -1, mres = -1; rn++; x += dx; y += dy; if( maze[x][y] == 'E') { return layer; } if( maze[x-dy][y+dx] != '#') //right { rres = find_rway(x,y,-dy,dx,layer+1); if(rres == -1) rn++; } if(rres == -1) { if( maze[x+dx][y+dy] != '#') //向前 { mres = find_rway(x,y,dx,dy,layer+1); if(mres == -1) rn++; } if(mres == -1) { if( maze[x+dy][y-dx] != '#') //left { lres = find_rway(x,y,dy,-dx,layer+1); if(lres == -1) rn++; } if(lres == -1) { return -1; } } } return 0; } int main() { int sx , sy,i,n; scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%d%d",&w,&h); ini_maze(&sx,&sy); if(1 == sx) { find_lway(sx,sy,1,0,2); find_rway(sx,sy,1,0,2); find_sway(sx,sy,1,0,2); } if(1 == sy) { find_lway(sx,sy,0,1,2); find_rway(sx,sy,0,1,2); find_sway(sx,sy,0,1,2); } if(w == sx) { find_lway(sx,sy,-1,0,2); find_rway(sx,sy,-1,0,2); find_sway(sx,sy,-1,0,2); } if(h == sy) { find_lway(sx,sy,0,-1,2); find_rway(sx,sy,0,-1,2); find_sway(sx,sy,0,-1,2); } printf("%d %d %d\n",ln,rn,sn); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator