• Problem E


    /*
      就是二维变成了三维,模版题。
    */
    #include <iostream> #include <cstring> #include <string> #include <queue> using namespace std; int k,a,b,c,t; int mp[55][55][55]; bool vis[55][55][55]; const int dp[6][3]={ {1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1} }; struct Point { int x,y,z,step; }; void DataIn() { scanf("%d%d%d%d", &a,&b,&c,&t); for (int i=0; i<a; i++) { for (int j=0; j<b; j++) { for (int h=0; h<c; h++) { scanf("%d", &mp[i][j][h]); } } } } bool Check(Point &p) { if (p.x<0 || p.x>=a || p.y<0 || p.y>=b || p.z<0 || p.z>=c || vis[p.x][p.y][p.z] || mp[p.x][p.y][p.z]) return false; return true; } void Bfs() { memset(vis,false,sizeof(vis)); queue<Point> qu; Point now,next; now.x=now.y=now.z=now.step=0; qu.push(now); vis[now.x][now.y][now.z]=true; while (!qu.empty()) { now=qu.front(); qu.pop(); if (now.x==a-1 && now.y==b-1 && now.z==c-1 && now.step<=t) { printf("%d ", now.step); return ; } for (int i=0; i<6; i++) { next=now; next.x+=dp[i][0]; next.y+=dp[i][1]; next.z+=dp[i][2]; if (!Check(next)) continue; vis[next.x][next.y][next.z]=true; next.step=now.step+1; qu.push(next); } } printf("-1 "); return ; } int main() { scanf("%d", &k); while (k--) { DataIn(); Bfs(); } return 0; }
  • 相关阅读:
    复利计算器2.01
    复利计算器2.0
    0429团队3.0
    0428 团队项目合作2.0作业
    "数学口袋精灵"bug
    操作系统-实验2
    博客评论
    复利计算升级
    0408 结对合作
    0406复利计算5.0
  • 原文地址:https://www.cnblogs.com/Hk456/p/12484795.html
Copyright © 2020-2023  润新知