HDU1240 Asteroids!(BFS)

来源:互联网 发布:淘宝店铺出售可靠吗 编辑:程序博客网 时间:2024/05/30 02:51

在这里先说一下,这个程序本来是wa的看了hh_cnyali的神奇dfs方法才ac的
题目大意:

题目给定一个三维空间的大小n,在这个空间中O为空地X为平地,给定起点坐标和终点坐标,求最短路径。

题目思路:三维bfs,注意输入问题,这个问题让我wa了两个小时:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>struct node{    int x,y,z,sum;}q[10000];using namespace std;int n,x2,y2,z2,x1,y1,z1,ans,d[6][3]={{0,1,0},{0,-1,0},{1,0,0},{-1,0,0},{0,0,1},{0,0,-1}};//移动坐标char a[11][11][11],s[10];bool ok(int j,int i,int k){     return j>=0&&j<n&&i>=0&&i<n&&k>=0&&k<n;//判断是否可行}int bfs(){//广搜    int f=0,p=1;    a[x1][y1][z1]='X';//将起点设为墙    q[0].x=x1;q[0].y=y1;q[0].z=z1;q[0].sum=0;//入队列    while(f<p){        if(q[f].x==x2 && q[f].y==y2 && q[f].z==z2){//判断是否达到目标            printf("%d %d\n",n,q[f].sum);//输出            return 1;            break;        }        for(int i=0;i<6;i++){            int x3=q[f].x+d[i][1];//注意x,y的d要反过来            int y3=q[f].y+d[i][0];            int z3=q[f].z+d[i][2];            if(ok(x3,y3,z3) && a[x3][y3][z3]=='O'){                a[x3][y3][z3]='X';//将走过的设为'X'                q[p].x=x3;q[p].y=y3;q[p].z=z3;q[p++].sum=q[f].sum+1;//入队列            }        }        f++;//f指向下一个    }    return 0;}int main(void){    int i,j,k,m;    while(scanf("%s%d",s,&n)!=EOF){        ans=0;        memset(a,0,sizeof(a));        for(i=0;i<n;i++)            for(j=0;j<n;j++)                for(k=0;k<n;k++)                   cin >>a[k][j][i]; //注意!!! 是kji不是ijk        scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2);        scanf("%s",s);        ans=bfs();        if(ans==0)//当不行时输出NO ROUTE            printf("NO ROUTE\n");    }    return 0;}
3 0
原创粉丝点击