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

一次性过,感觉不错哦!!!

Posted by Smile_7 at 2013-03-18 21:43:31 on Problem 2251
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>

using namespace std;

class point
{
public:
    int l , r , c ;
};
int l , r , c ;

char dungeon[50][50][50];
int visit[50][50][50];
int b_l , b_r , b_c , e_l , e_r , e_c ;

void bfs()
{
    int direct[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
    queue<point> Q ;
    point push , temp ;
    visit[b_l][b_r][b_c] = 0;
    push.l = b_l ;
    push.r = b_r ;
    push.c = b_c ;
    Q.push(push) ;

    while(!Q.empty())
    {
        temp = Q.front();
        if(temp.l == e_l && temp.r == e_r && temp.c == e_c)
            return ;

        for(int i = 0; i < 6; i ++)
        {
            push.l = temp.l + direct[i][0] ;
            push.r = temp.r + direct[i][1] ;
            push.c = temp.c + direct[i][2] ;

            if(dungeon[push.l][push.r][push.c] == '.' && visit[push.l][push.r][push.c] == -1)
            {
                visit[push.l][push.r][push.c] = visit[temp.l][temp.r][temp.c] + 1;
                Q.push(push) ;
            }
        }
        Q.pop();
    }
}

int main()
{
    freopen("in.txt","r",stdin);
    int  i , j , k ;
    while(1)
    {
        cin>>l>>r>>c;
        if(!l && !r && !c)
            break ;

        memset(dungeon,'#',sizeof(dungeon));
        memset(visit,-1,sizeof(visit));

        for(i = 1; i <= l; i++)
            for(j = 1; j <= r; j++)
                for(k = 1; k <= c; k++)
                {
                    cin>>dungeon[i][j][k];

                    if(dungeon[i][j][k] == 'S')
                    {
                        b_l = i ;
                        b_r = j ;
                        b_c = k ;
                    }
                    if(dungeon[i][j][k] == 'E')
                    {
                        e_l = i ;
                        e_r = j ;
                        e_c = k ;
                        dungeon[i][j][k] = '.' ;
                    }
                }
        bfs();
        if(visit[e_l][e_r][e_c] != -1)
            cout<<"Escaped in "<<visit[e_l][e_r][e_c]<<" minute(s)."<<endl;
        else
            cout<<"Trapped!"<<endl;
    }
    return 0;
}

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