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

用结构体的同学看过来 终于ac了

Posted by ypw0116 at 2017-07-08 18:02:27 on Problem 2251
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N=35;
struct SE{
	int l,r,c,ans;
	bool operator ==(const SE &b)const{
		return (this->l==b.l && this->r==b.r && this->c==b.c);
	}
};
SE s,e;
bool map[N][N][N],vis[N][N][N];
int L,R,C,shortans;

bool BFS(){
	int i;
	queue<SE> q;
	
	vis[s.l][s.r][s.c]=true;
	q.push(s);
	while(!q.empty()){
		SE u;
		u=q.front(), q.pop();
		
		if(u==e){ shortans=u.ans; return true;	}
		if(!vis[u.l+1][u.r][u.c] && map[u.l+1][u.r][u.c]){
			vis[u.l+1][u.r][u.c]=1;
			SE next; next.l=u.l+1; next.r=u.r; next.c=u.c;
			next.ans=u.ans+1;
			q.push(next);
		}
		if(!vis[u.l-1][u.r][u.c] && map[u.l-1][u.r][u.c]){
			vis[u.l-1][u.r][u.c]=1;
			SE next; next.l=u.l-1; next.r=u.r; next.c=u.c;
			next.ans=u.ans+1;
			q.push(next);
		}
		if(!vis[u.l][u.r+1][u.c] && map[u.l][u.r+1][u.c]){
			vis[u.l][u.r+1][u.c]=1;
			SE next; next.l=u.l; next.r=u.r+1; next.c=u.c;
			next.ans=u.ans+1;
			q.push(next);
		}
		if(!vis[u.l][u.r-1][u.c] && map[u.l][u.r-1][u.c]){
			vis[u.l][u.r-1][u.c]=1;
			SE next; next.l=u.l; next.r=u.r-1; next.c=u.c;
			next.ans=u.ans+1;
			q.push(next); 
		}
		if(!vis[u.l][u.r][u.c+1] && map[u.l][u.r][u.c+1]){
			vis[u.l][u.r][u.c+1]=1;
			SE next; next.l=u.l; next.r=u.r; next.c=u.c+1;
			next.ans=u.ans+1;
			q.push(next);
		}
		if(!vis[u.l][u.r][u.c-1] && map[u.l][u.r][u.c-1]){
			vis[u.l][u.r][u.c-1];
			SE next; next.l=u.l; next.r=u.r; next.c=u.c-1;
			next.ans=u.ans+1;
			q.push(next);
		}
	}
	return false;
}
int main(){
	ios::sync_with_stdio(false);
	while(scanf("%d%d%d",&L,&R,&C)!=EOF && (L+R+C)){
		memset(map,false,sizeof(map));
		memset(vis,false,sizeof(vis));
		char cc; s.ans=0;
		for(int l=1;l <= L;l++){//前面错在这里 从1开始,从0开始的话,会搜到-1
			for(int r=1;r <= R;r++){
				for(int c=1;c <= C;c++){
					cin>>cc;
					if(cc== '.') map[l][r][c]=true;
					if(cc== 'S'){
						map[l][r][c]=true;
						s.l=l;	s.r=r;	s.c=c;
					}
					if(cc== 'E'){
						map[l][r][c]=true;
						e.l=l;	e.r=r;	e.c=c;
					}
				}
			}
		}
		
		if(BFS()) printf("Escaped in %d minute(s).\n",shortans);
		else printf("Trapped!\n");
	}
	
	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