• G——胜利大逃亡 (BFS)


    例题都过不了 原因不详

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    using namespace std;
    int mp[55][55][55];
    bool vis[55][55][55];
    int r[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
    struct weizhi
    {
    int x,y,z,step;
    };
    weizhi a,next;
    int A,B,C,K,ans;
    bool judge(int x,int y,int z)
    {
    if(x<0|y<0|z<0|x>=A|y>=B|z>=C)
    return 0;
    if(mp[x][y][z]=='1')
    return 0;
    if(vis[x][y][z]==1)
    return 0;
    return 1;
    }
    int BFS()
    {
    int i,X,Y,Z,S;
    queue<weizhi>Q;
    a.x=0;a.y=0;a.z=0;
    a.step=0;
    Q.push(a);
    vis[0][0][0]=true;
    while(Q.empty())
    {
    a=Q.front();
    Q.pop();
    if(a.x==A-1&&a.y==B-1&&a.z==C-1)
    {
    return a.step;
    }
    for(i=0;i<6;i++)
    {
    X=a.x+r[i][0];
    Y=a.y+r[i][1];
    Z=a.z+r[i][2];
    S=a.step+1;
    if(judge(X,Y,Z))
    {
    vis[X][Y][Z]=true;
    next.x=X; next.y=Y; next.z=Z; next.step=S;
    Q.push(next);
    }
    }
    }
    return 0;

    }
    int main()
    {
    int i,j,t,k;
    scanf("%d",&t);
    while(t--)
    {
    scanf("%d%d%d%d",&A,&B,&C,&K);
    // memset(mp,0,sizeof(mp));
    memset(vis,0,sizeof(vis));
    for(i=0;i<A;i++)
    {
    for(j=0;j<B;j++)
    {
    for(k=0;k<C;k++)
    {
    scanf("%d",&mp[i][j][k]);
    }
    }
    }
    // for(i=0;i<A;i++)
    // {
    // for(j=0;j<B;j++)
    // {
    // for(k=0;k<C;k++)
    // {
    // printf("%d ",mp[i][j][k]);
    // }
    // cout<<' ';
    // }
    // }
    ans=0;
    ans=BFS();
    if(ans<K) cout<<ans<<endl;
    else cout<<-1<<endl;
    }
    return 0;
    }

  • 相关阅读:
    SQL注入过滤
    ASP.NET长文章分页
    简单的权限管理类
    不错的面试题
    【转载】【重要】Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
    回到xwindows
    suse11 linux不自动启动xwindows
    flash的几种工具
    mencoder和ffmpeg参数详解
    ffmpeg和Mencoder使用实例小全
  • 原文地址:https://www.cnblogs.com/guanwen769aaaa/p/9997454.html
Copyright © 2020-2023  润新知