首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

uva UVa 532解决方法

2013-07-08 
uva UVa 532#include iostream#include algorithm#include cmath#include cstring#include cstdi

uva UVa 532

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
char maze[33][33][33];
int vis[33][33][33];
int l, r, c, t, mint;
int move[7][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
void dfs(int x, int y, int z)
{
    if(maze[x][y][z] == '#')
      return;
    if(maze[x][y][z] == 'E')
      if(t<mint) { mint = t; return;}
    for(int i = 0; i < 6; i++)
    {
      int px = x+move[i][0];
      int py = y+move[i][1];
      int pz = z+move[i][2];
      if(!vis[px][py][pz] && px>=0 && px<l && py>=0 && py<r && pz>=0 && pz<c)
      {
        t++;
        vis[px][py][pz] = 1;
        dfs(px, py, pz);
        vis[px][py][pz] = 0;
        t--;
      }
    }
    return;
}

int main()
{
  while(cin >> l >> r >> c, l+r+c)
  {
    getchar();
    for(int i = 0; i < l; i++)
    {
      for(int j = 0; j < r; j++)
      scanf("%s", maze[i][j]);
    }
    memset(vis, 0, sizeof(vis));
    mint = 30000;t = 0;
    for(int i = 0; i < l; i++)
      for(int j = 0; j < r; j++)
        for(int k = 0; k < c; k++)
        if(maze[i][j][k] == 'S')
          dfs(i, j, k);
    if(mint == 30000) cout << "Trapped!" << endl;
    else printf("Escaped in %d minute(s).\n", mint);
  }
  return 0;
}


以上是此题代码,刚接触c++,大一学弟,求高手指点,为何RE,尝试bfs可以过,就是不知道为什么这个过不了。
------解决方案--------------------



//vis应该放后边吧。。应该先判断是否越界再访问vis吧。。否则可能越界的。。
if(px>=0 && px<l && py>=0 && py<r && pz>=0 && pz<c && !vis[px][py][pz])

热点排行