Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

同一份代码c++AC。。。g++WA。。。求大神破解。。。

Posted by chliul at 2013-12-10 23:32:44 on Problem 3083
#include <stdio.h>
#include <queue>
using namespace std;

char map[42][42] = {};

struct node {
    int x;
    int y;
    int step;
};

int move_x[4] = { 1, 0, -1, 0 }; 
int move_y[4] = { 0, -1, 0, 1 };

int getdir(int w, int h, int &startx, int &starty) {
    for(int i = 2; i <= h-1; i++) {
        if(map[i][1] == 'S') {
            startx = i;
            starty = 1;
            return 0;
        }
        if(map[i][w] == 'S') {
            startx = i;
            starty = w;
            return 2;
        }
    }
    for(int i = 2; i <= w-1; i++) {
        if(map[1][i] == 'S') {
            startx = 1;
            starty = i;
            return 1;
        }
        if(map[h][i] == 'S') {
            startx = h;
            starty = i;
            return 3;
        }
    }
}

int bfs(int w, int h) {
    bool visit[42][42] = {};
    int startx, starty;
    getdir(w, h, startx, starty);
    queue<node> q;
    visit[startx][starty] = true;
    node first;
    first.x = startx;
    first.y = starty;
    first.step = 1;
    q.push(first);
    while(!q.empty()) {
        first = q.front();
        q.pop();
        for(int i = 0; i < 4; i++) {
            int nowx = first.x + move_x[i];
            int nowy = first.y + move_y[i];
            if(map[nowx][nowy] == 'E') {
                return first.step + 1;
            }
            if(map[nowx][nowy] != '#' && !visit[nowx][nowy]) {
                visit[nowx][nowy] = true;
                node tmp;
                tmp.x = nowx;
                tmp.y = nowy;
                tmp.step = first.step+1;
                q.push(tmp);
            }
        }
    }
}

int wall(int one_hand, int w, int h) {
    int nowx, nowy;
    int dir = getdir(w, h, nowx, nowy);
    int res = 1;
    while(map[nowx][nowy] != 'E') {
        dir = (dir + 4 + one_hand) % 4;
        while(map[nowx+move_x[dir]][nowy+move_y[dir]] == '#') {
            dir = (dir + 4 + one_hand*(-1)) % 4;
        }
        nowx += move_x[dir];
        nowy += move_y[dir];
        res++;
    }
    return res;
}

int main() {
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        int w, h;
        scanf("%d %d", &w, &h);
        for(int i = 1; i <= h; i++) {
            scanf("%s", &map[i][1]);
        }
        for(int i = 0; i< h+2; i++) {
            map[i][0] = map[i][w+1] = '#';
        }
        for(int i = 0; i < w+2; i++) {
            map[0][i] = map[h+1][i] = '#';
        }
        
        
        printf("%d %d %d\n", wall(-1, w, h), wall(1, w, h), bfs(w, h));
        
    }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator