2799085_ac_0ms_240k.cpp

来自「北大大牛代码 1240道题的原代码 超级权威」· C++ 代码 · 共 81 行

CPP
81 行
字号
#include <stdio.h>
#include <string.h>
#include <queue>

using namespace std;

int l, r, c;
char map[31][31][31];
int visited[31][31][31];
int sti, stj, stk;
int mov[][3] = {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};

struct node
{
	int i, j, k;
	int way;
};

int valid(int i,int j,int k)
{
	if(i<0||i>=l||j<0||j>=r||k<0||k>=c)
		return 0;
	return 1;
}

void bfs()
{
	int i, j, k;
	int l;
	node t, p;
	queue <node> que;

	memset(visited,0,sizeof(visited));
	visited[sti][stj][stk] = 1;
	t.i = sti;t.j = stj;t.k = stk;t.way = 0;
	que.push(t);
	while(!que.empty())
	{
		t = que.front();
		que.pop();
		for(l = 0; l < 6; l++)
		{
			i = t.i + mov[l][0];
			j = t.j + mov[l][1];
			k = t.k + mov[l][2];
			if (valid(i,j,k)&&!visited[i][j][k]&&map[i][j][k]!='#')
			{
				p.i = i;p.j = j;p.k = k;p.way = t.way+1;
				visited[i][j][k] = 1;
				if(map[i][j][k]=='E')
				{
					printf("Escaped in %d minute(s).\n",p.way);
					return ;
				}
				que.push(p);
			}
		}
	}
	puts("Trapped!");
}

int main()
{
	int i, j, k;

	while(scanf("%d%d%d",&l,&r,&c),l)
	{
		for(i = 0; i < l; i++)
		{
			for(j = 0; j < r; j++)
			{
				scanf("%s",map[i][j]);
				for(k = 0; k < c; k++)
					if(map[i][j][k]=='S')
						sti = i,stj = j,stk = k;
			}
		}
		bfs();
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?