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 925695531 at 2011-03-31 21:31:11 on Problem 2251
#include<iostream>
#include<queue>
using namespace std;

struct point 
{
    int	 x , y , z , step ;
};
point temp , next ;

int  i , j , k ;
int  a , b , c ;
int  startx , starty , startz , endx , endy , endz ;  
int  dx[6] = { 1 , -1 , 0 , 0  , 0 , 0 } ;
int  dy[6] = { 0 ,  0 , 1 , -1 , 0 , 0 } ;
int  dz[6] = { 0 ,  0 , 0 , 0  , 1 , -1} ;
char map[31][31][31] ;
bool visit[31][31][31] , flag  ;

int main ()
{
	while ( cin >> a >> b >> c && a + b + c )
	{
		queue<point> q ;
        flag = true ;
		memset( visit , true , sizeof( visit ) ) ;
		for ( i = 0 ; i < a ; i ++ )
			for ( j = 0 ; j < b ; j ++ )
				for ( k = 0 ; k < c ; k ++ )
				{
					cin >> map[i][j][k] ;
					if ( map[i][j][k] == 'S' )
					{
						startx = i ;
						starty = j ; 
						startz = k ;
					}
					if ( map[i][j][k] == 'E' )
					{
						endx = i ;
						endy = j ;
						endz = k ;
					}
				}
		visit[startx][starty][startz] = false ;
		temp.x = startx ;
		temp.y = starty ;
		temp.z = startz ;
		temp.step = 0 ;
		q.push( temp ) ;
		while ( ! q.empty() )
		{
			if ( startx == endx && starty == endy && startz == endz )
			{
				cout << "Escaped in 0 minute(s)." << endl ;
				break ;
			}
			temp = q.front() ;
			q.pop() ;
			for ( i = 0 ; i < 6 ; i ++ )
			{
				if ( temp.x+dx[i]<a && temp.x+dx[i]>=0 && temp.y+dy[i]<b && temp.y+dy[i]>=0 && temp.z+dz[i]<c && temp.z+dz[i]>=0 && visit[temp.x+dx[i]][temp.y+dy[i]][temp.z+dz[i]] && map[temp.x+dx[i]][temp.y+dy[i]][temp.z+dz[i]] != '#')
				{
					next.x = temp.x + dx[i] ;
					next.y = temp.y + dy[i] ;
					next.z = temp.z + dz[i] ;
					next.step = temp.step + 1 ;
					visit[next.x][next.y][next.z] = false ;
					q.push(next) ;
					if (next.x == endx && next.y == endy && next.z == endz )
					{
						cout << "Escaped in "<<next.step<<" minute(s)." << endl ;
						flag = false ;
					}
				}
			}
			if ( ! flag ) break ;
		}
        if ( flag ) 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