POJ 2225 - Asteroids!

来源:互联网 发布:1024程序员节 编辑:程序博客网 时间:2024/05/17 00:05

题目分析:

和POJ-2251基本上差不多,只是注意一点:输入的顺序,2251是正常顺序x,y,z,而本题则是z,y,x,只要注意这一点,其他的和2251就一样了,也是3维的BFS;

/*
START 1
O
0 0 0
0 0 0
END
START 3
XXX
XXX
XXX
OOO
OOO
OOO
XXX
XXX
XXX
0 0 1
2 2 1
END
START 5
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
OOOOO
0 0 0
4 4 4
END
*/
/*
1 0
3 4
NO ROUTE
*/

 

code:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
struct node
{
    int x,y,z,step;
} q,p;
int direct[6][3]= {{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}};
char map[101][101][101];
bool flag[101][101][101];
int n;
bool judge(int xi,int yi,int zi)
{
    if(xi>=0 && xi<n && yi>=0 && yi< n && zi>=0&& zi<n && !flag[xi][yi][zi] && map[xi][yi][zi]!=\'X\')
        return true;
    return false;
}
int x1,x2,y1,y2,z1,z2;
int bfs()
{
    queue<node> Q;
    memset(flag,false,sizeof(flag));
    p.x=x1;
    p.y=y1;
    p.z=z1;
    p.step=0;
    flag[x1][y1][z1]=true;
    Q.push(p);
    while(!Q.empty())
    {
        p=Q.front();
        Q.pop();
        if(p.x==x2 && p.y==y2 && p.z==z2)
            return true;
        for(int i=0; i<6; i++)
        {
            int tx=p.x+direct[i][0];
            int ty=p.y+direct[i][1];
            int tz=p.z+direct[i][2];
            if(judge(tx,ty,tz))
            {
                q.x=tx;
                q.y=ty;
                q.z=tz;
                q.step=p.step+1;
                flag[q.x][q.y][q.z]=true;
                Q.push(q);
            }
        }
    }
    return false;
}
int main()
{
    //freopen(\"in.txt\",\"r\",stdin);
    //freopen(\"out.txt\",\"w\",stdout);
    char str[10];
    while(scanf(\"%s %d\",str,&n)!=EOF)
    {
        memset(map,\'X\',sizeof(map));
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                for(int k=0; k<n; k++)
                    cin>>map[i][j][k];
        cin>>z1>>y1>>x1;
        cin>>z2>>y2>>x2;
        cin>>str;
        if(!bfs())
            cout<<\"NO ROUTE\"<<endl;
        else
            cout<<n<<\" \"<<p.step<<endl;
    }
    return 0;
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳市公安局办保安员证怎么办? 老婆被车撞了后失忆了怎么办 生气引起的短暂失忆怎么办 win10系统忘记开机密码怎么办 戴尔win10密码忘了怎么办 戴尔电脑win10密码忘了怎么办 出门忘记带身份证了怎么办 一年染了7次头发怎么办 低头久了颈椎疼怎么办 一只眼睛磨得慌怎么办 没有睡好眼睛痛怎么办 好几天没休息好怎么办 血糖高睡不好觉怎么办 眼睛感觉磨的慌怎么办 痔疮手术后大便疼肛裂痛怎么办 肛裂排便困难痛怎么办 智齿导致的牙疼怎么办 肛裂一直不愈合怎么办 孕妇肛裂拉屎疼怎么办 产后50天小肚子突出怎么办 肚子像怀孕一样大怎么办 蹲厕所拉不出来怎么办 生气导致回奶了怎么办 老公每晚要吃奶才睡觉怎么办 分分钟想把老公杀掉怎么办 老公出轨闹的厉害离家出走怎么办? 儿子故意杀人一审判死刑怎么办 被家暴时妻子杀了丈夫该怎么办 丈夫挣钱不给妻子怎么办 白色皮鞋染了色怎么办 刺扎到手里拿不出来怎么办 军官证解锁片丢了怎么办 六安市人民医院药品停用了怎么办 信无法寄到该怎么办 5个月的宝宝光有屎沫怎么办 胸牌的别针坏了怎么办 工资表税金扣多了怎么办? 装修公司不发放工程怎么办 公司不给开收入证明怎么办 装修公司不付工人工资怎么办 收入证明少500元怎么办