zoukankan      html  css  js  c++  java
  • 胜利大逃亡

     1 #include<iostream>
     2 #include<queue>
     3 using namespace std;
     4 int map[51][51][51];
     5 int flag[51][51][51];
     6 int A,B,C,T;
     7 int dir[][3]={{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}};
     8 struct node
     9 {
    10     int x,y,z;
    11     int time;
    12 };
    13 void bfs()
    14 {
    15     int i;
    16     flag[0][0][0]=1;
    17     node p,temp;
    18     p.time =p.x =p.y=p.z=0;
    19     queue<node>q;
    20     q.push(p);
    21     while(!q.empty())
    22     {
    23         p=q.front();
    24         q.pop();
    25         for(i=0;i<6;i++)
    26         {
    27             temp=p;
    28             temp.x+=dir[i][0];
    29             temp.y+=dir[i][1];
    30             temp.z+=dir[i][2];
    31             temp.time=p.time+1;
    32             if(temp.x<0||temp.x>=A||temp.y<0||temp.y>=B||temp.z<0||temp.z>=C||map[temp.x][temp.y][temp.z]==1)
    33                 continue;
    34             if(temp.x==A-1&&temp.y==B-1&&temp.z==C-1)
    35             {
    36                 if(temp.time>T)
    37                     printf("-1\n");
    38                 else
    39                     printf("%d\n",temp.time);
    40                 return;
    41             }
    42             if(map[temp.x][temp.y][temp.z]==0&&flag[temp.x][temp.y][temp.z]==0)
    43             {
    44                 q.push(temp);
    45                 flag[temp.x][temp.y][temp.z]=1;
    46             }
    47         }
    48     }
    49     printf("-1\n");
    50 }
    51 int main()
    52 {
    53     int K;
    54     scanf("%d",&K);
    55     int i,j,k;
    56     while(K--)
    57     {
    58         scanf("%d %d %d %d",&A,&B,&C,&T);
    59         int canwalk=0;
    60         memset(flag,0,sizeof(flag));
    61         for(i=0;i<A;i++)
    62         {
    63             for(j=0;j<B;j++)
    64             {
    65                 for(k=0;k<C;k++)
    66                 {
    67                     scanf("%d",&map[i][j][k]);
    68                     if(map[i][j][k]==0)
    69                         canwalk++;
    70                 }
    71             }
    72         }
    73         if(A*B*C==1)
    74             printf("0\n");
    75         else if(canwalk<A+B+C+1)
    76             printf("-1\n");
    77         else
    78             bfs();
    79     }
    80     return 0;
    81 }


    这是我第一个搜索题,当然也是第一个广搜题,刚开始的时候真不知道怎么开始,还好,有大家的帮忙,自己开始对队列有了一点点的熟悉,可是,自己懂得真的太少了,真的很需要努力啊!

  • 相关阅读:
    JavaScript 显示数据
    c#运算符重载
    C++栈和队列标准库函数
    unity AB打包 unity2018.2.2
    VR AR SDK汇总
    Unity程序们经常用到的网址(方便自己用,一直更新)
    Unity打包Visual Studio部署HoloLens找不到WindowsMobile SDK的解决方案
    【Unity3D】串口通信
    【Unity3D】锁屏、解锁相关函数回调
    Unity3D Destroy方法的细节
  • 原文地址:https://www.cnblogs.com/ouyangduoduo/p/2559610.html
Copyright © 2011-2022 走看看