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 Andimeo at 2008-11-12 13:55:12 on Problem 2251
#include<queue>
#include<cstdio>
#include<map>

using namespace std;

struct point
{
	int x,y,z,time;
	point(int a=0,int b=0,int c=0,int t=0):x(a),y(b),z(c),time(t){}
};

struct pp
{
	int x,y,z;
	pp(int a = 0,int b = 0,int c = 0):x(a),y(b),z(c){};
	bool operator<(const pp& an)const
	{
		if(x == an.x && y == an.y) return z<an.z;
		if(x == an.x) return y<an.y;
		return x<an.x;
	}
};

map<pp,bool> my;

queue<point> myq;

int s[6][3] = {0,1,0,0,-1,0,0,0,-1,0,0,1,1,0,0,-1,0,0};

char graph[40][40][40];

int main(void)
{
	int l,r,c;
	while(scanf("%d%d%d",&l,&r,&c)==3)
	{
		my.clear();
		while(!myq.empty())
			myq.pop();
		if(!l&&!r&&!c)
			break;
		int i,j,k;
		point begin,end;
		end.time = 0x7fffffff;
		for(i=0;i<l;i++)
		{
			for(j=0;j<r;j++)
			{
				scanf("%s",graph[i][j]);
				for(k=0;k<c;k++)
				{
					if(graph[i][j][k] == 'E')
					{
						end.x = i;
						end.y = j;
						end.z = k;
					}
					if(graph[i][j][k] == 'S')//找S的位置,这一句为真,也不进入
					{
						begin.x == i;
						begin.y == j;
						begin.z == k;
					}
				}
			}
		}
		pp start(begin.x,begin.y,begin.z);
		myq.push(begin);
		my[start] = true;
		while(!myq.empty())
		{
			begin = myq.front();
			myq.pop();
			start.x = begin.x;
			start.y = begin.y;
			start.z = begin.z;
			if(begin.x == end.x && begin.y == end.y && begin.z ==end.z)
			{
				end.time = begin.time;
				break;
			}
			for(i=0;i<6;i++)
			{
				if(begin.x+s[i][0]>=0&&begin.x+s[i][0]<l&&begin.y+s[i][1]>=0&&begin.y+s[i][1]<r&&begin.z+s[i][2]>=0&&begin.z+s[i][2]<c)
				{
					start.x = begin.x+s[i][0];
					start.y = begin.y+s[i][1];
					start.z = begin.z+s[i][2];
					if(!my[start] && graph[start.x][start.y][start.z] != '#')
					{
						my[start] = true;
						myq.push(point(start.x,start.y,start.z,begin.time+1));
					}
					start.x -= s[i][0];
					start.y -= s[i][1];
					start.z -= s[i][2];
				}
			}
		}
		if(end.time == 0x7fffffff)
			puts("Trapped!");
		else
			printf("Escaped in %d minute(s).\n",end.time);
	}
	return 0;
}

/*
1 4 4
####
#S##
#E##
....*/
这个代码征对这一句,找不到S的位置,我郁闷,大家帮忙看看怎么回事啊

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