1091 Acute Stroke(30 分)

注意对应好xyz
需要返回值:DFS使用max在每次的DFS中更新,BFS直接计数即可
如果图很大不要用DFS,会爆栈

#include
using namespace std;
struct node{
    int z,y,x;
}Node;
int G[70][1300][130];
bool inq[70][1300][130];
int ans;
int m,n,L,T;
int Z[6]={1,-1,0,0,0,0};
int Y[6]={0,0,1,-1,0,0};
int X[6]={0,0,0,0,1,-1};
bool judge(int z,int y,int x)
{
    if(z<0||z>=L||y<0||y>=m||x<0||x>=n)return false;
    if(G[z][y][x]==0||inq[z][y][x]==true)return false;
    return true;
}
int BFS(int z,int y,int x)
{
    int temp=0;
    queueq;
    Node.x=x,Node.y=y,Node.z=z;
    q.push(Node);
    inq[z][y][x]=true;
    while(!q.empty())
    {
        node front=q.front();
        temp++;
        q.pop();
        for(int i=0;i<6;i++)
        {
            int newx=front.x+X[i],newy=front.y+Y[i],newz=front.z+Z[i];
            if(judge(newz,newy,newx))
            {
                Node.x=newx,Node.y=newy,Node.z=newz;
                q.push(Node);
                inq[newz][newy][newx]=true;
            }
        }
    }
    return temp>=T?temp:0;
}
int main()
{
    
    scanf("%d%d%d%d",&m,&n,&L,&T);
    for(int z=0;z

你可能感兴趣的:(1091 Acute Stroke(30 分))