[NWPU2016][寒假作业][正常版第三组]R&&HDU1240

题意是有个三维的地图,从起点到终点的最短路径。用bfs做,不过这个题坑的地方在于,开三维数组你要搞清楚纬度的关系。a[i][j][h] i是层,j是行,h是列。然后坐标呢,又是列,行,层,所以如果要用sx,sy,sz,读取的时候要用 sz,sy,sx,的顺序读取。然后才能啊a[sx][sy][sz]这么用。。。这个搞了好久才搞清楚。。。好笨啊。不这么来也行,只要搞清楚行列层关系就好。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <map>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
#include <set>
#include <cmath>
#define inf 0x7fffffff
using namespace std;
char s[100],w[20][20][20],flag[20][20][20],m[20][20][20],e[100];
int n,sx,sy,sz,gx,gy,gz;
int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
struct p{
int x,y,z;
};
int bfs(){
   queue<p> q;
   p a;
   a.x=sx,a.y=sy,a.z=sz;
   flag[sx][sy][sz]=1;
   q.push(a);
   while(q.size())
   {
        p b;
        b=q.front();
        q.pop();
        if(b.x==gx&&b.y==gy&&b.z==gz) return 1;
        for(int i=0;i<6;i++)
        {
                int nx=b.x+dir[i][0],ny=b.y+dir[i][1],nz=b.z+dir[i][2];
                if(w[nx][ny][nz]=='O'&&!flag[nx][ny][nz]&&nx>0&&nx<=n&&ny>0&&ny<=n&&nz>0&&nz<=n)
                {
                        flag[nx][ny][nz]=1;
                        p c;
                        c.x=nx,c.y=ny,c.z=nz;
                        q.push(c);
                        m[nx][ny][nz]=m[b.x][b.y][b.z]+1;
                }
        }
   }
   return 0;
}
int main()
{
    while(scanf("%s%d",s,&n)!=EOF)
    {
        memset(flag,0,sizeof(flag));
        memset(m,0,sizeof(m));
        for(int i=1;i<=n;i++)
        {
                for(int j=1;j<=n;j++)
                {
                        for(int h=1;h<=n;h++)
                        {
                                scanf(" %c",&w[i][j][h]);
                        }
                }
        }
        scanf("%d%d%d%d%d%d",&sz,&sy,&sx,&gy,&gz,&gx);
        sx+=1,sy+=1,sz+=1,gx+=1,gy+=1,gz+=1;
        scanf("%s",e);
         if(bfs())
          printf("%d %d\n",n,m[gx][gy][gz]);
          else printf("NO ROUTE\n");
        }
    return 0;
}

 

posted @ 2016-02-15 15:18  GeniusYang  阅读(339)  评论(0编辑  收藏  举报