zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    数据访问技术系列课程 笔记(2) ADO.NET 连接方式进行数据访问
    Modern C# 系列课程笔记 第11节 深入委托和事件
    idea 将项目托管到 Git 报错:Can't finish Gitee sharing process
    ADO.Net
    WebService
    2013年了
    201301杂谈
    流程图
    出错列表
    杂谈4 2012年8月15日开
  • 原文地址:https://www.cnblogs.com/guanwen769aaaa/p/9997454.html
Copyright © 2011-2022 走看看