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 ULTMaster at 2014-06-14 23:19:01 on Problem 2251
#include <fstream>

#include <iostream>
#include <deque>
using namespace std;

#define INF 60000
typedef unsigned short DIS_T;
enum Color { white, grey, black };

struct id {
	short x;
	short y;
	short z;
	id(short a, short b, short c)
		: x(a), y(b), z(c) { }
	id() { }
};

int main()
{
	//ifstream ifs("in.txt");
	char data[30][30][30];
	DIS_T distance[30][30][30];
	Color color[30][30][30];
	deque<id> Q;
	id u;
	short p, q, r;
	int L, R, C;
	while (cin >> L >> R >> C && L != 0)
	{
		memset(data, 0, sizeof(data));
		memset(distance, 0, sizeof(distance));
		memset(color, 0, sizeof(color));
		Q.clear();
		cin.get();
		for (short i = 0; i < L; ++i)
		{
			for (short j = 0; j < R; ++j)
			{
				for (short k = 0; k < C; ++k)
				{
					data[i][j][k] = cin.get();
					if (data[i][j][k] != 'S')
						distance[i][j][k] = INF;
					else
					{
						color[i][j][k] = grey;
						Q.push_back(id(i, j, k));
					}
					if (data[i][j][k] == 'E')
					{
						data[i][j][k] = '.';
						p = i;
						q = j;
						r = k;
					}
				}
				cin.get();
			}
			cin.get();
		}
		
		
		while (!Q.empty())
		{
			u = Q.front();
			if (u.x == p && u.y == q && u.z == r)
				break;
			Q.pop_front();
			if (u.x > 0 && color[u.x - 1][u.y][u.z] == white && data[u.x - 1][u.y][u.z] == '.')
			{
				distance[u.x - 1][u.y][u.z] = distance[u.x][u.y][u.z] + 1;
				color[u.x - 1][u.y][u.z] = grey;
				Q.push_back(id(u.x - 1, u.y, u.z));
			}
			if (u.x < L - 1 && color[u.x + 1][u.y][u.z] == white && data[u.x + 1][u.y][u.z] == '.')
			{
				distance[u.x + 1][u.y][u.z] = distance[u.x][u.y][u.z] + 1;
				color[u.x + 1][u.y][u.z] = grey;
				Q.push_back(id(u.x + 1, u.y, u.z));
			}
			if (u.y > 0 && color[u.x][u.y - 1][u.z] == white && data[u.x][u.y - 1][u.z] == '.')
			{
				distance[u.x][u.y - 1][u.z] = distance[u.x][u.y][u.z] + 1;
				color[u.x][u.y - 1][u.z] = grey;
				Q.push_back(id(u.x, u.y - 1, u.z));
			}
			if (u.y < R - 1 && color[u.x][u.y + 1][u.z] == white && data[u.x][u.y + 1][u.z] == '.')
			{
				distance[u.x][u.y + 1][u.z] = distance[u.x][u.y][u.z] + 1;
				color[u.x][u.y + 1][u.z] = grey;
				Q.push_back(id(u.x, u.y + 1, u.z));
			}
			if (u.z > 0 && color[u.x][u.y][u.z - 1] == white && data[u.x][u.y][u.z - 1] == '.')
			{
				distance[u.x][u.y][u.z - 1] = distance[u.x][u.y][u.z] + 1;
				color[u.x][u.y][u.z - 1] = grey;
				Q.push_back(id(u.x, u.y, u.z - 1));
			}
			if (u.z < C - 1 && color[u.x][u.y][u.z + 1] == white && data[u.x][u.y][u.z + 1] == '.')
			{
				distance[u.x][u.y][u.z + 1] = distance[u.x][u.y][u.z] + 1;
				color[u.x][u.y][u.z + 1] = grey;
				Q.push_back(id(u.x, u.y, u.z + 1));
			}
			color[u.x][u.y][u.z] = black;
		}

		if (distance[p][q][r] < INF)
			cout << "Escaped in " << distance[p][q][r] << " 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