• HDOJ1253 胜利大逃亡 【三维BFS】


    Problem : 1253 ( 胜利大逃亡 )     Judge Status : Accepted
    RunId : 5861859    Language : C++    Author : qq1203456195

     做这道题经历了一番波折啊~

    开始写了一个代码、自己测试了几个小例子、都通过了、可是就是不能AC。

    后来经苏哥指点,我学会了一种新的测试方法,经过这种方法的检测,我的代码明显是有错误的、

    后来发现我没有考虑环路、导致部分情形程序会一直运行下去、然后我就加上了一些约束、

    各种情形都能给出解了、但是有的明显不是最短路径、这是才发现原来我的代码是DFS、

    本来应该用队列的、我最初却使用了栈、

    今天上午有时间写一些代码了、发现C++中的队列容器不会用、就模仿别人的代码操作、

    学到的用法就是下边四个、看C++Primer中对queue的用法也没有举例子、而且只告诉

    了几个函数、看过之后只是会用、并不算掌握。

    #include<queue>

    queue<type> qvar;

    qvar.pop();

    var=qvar.front();

    qvar.push(var);

    #include <iostream>
    #include <queue>
    #include <cstdio> using namespace std; #define N 51 class Point{ public: int x,y,z; }; int a,b,c,T; int maze[N][N][N];//迷宫 int dist[N][N][N];//记录000到每个点的距离 int step[6][3]={{1,0,0},{0,1,0},{0,0,1},{0,0,-1},{0,-1,0},{-1,0,0}}; int illegal(Point p) { int flag=0; if (p.x<0||p.x>=a) flag=1; if (p.y<0||p.y>=b) flag=1; if (p.z<0||p.z>=c) flag=1; return flag; } int bfs() { queue<Point> q; int i,flag=1; Point p,nxt; p.x=0; p.y=0; p.z=0; q.push(p);//000入队 while (!q.empty()&&flag) { p=q.front(); q.pop(); for (int i=0;i<6;i++) { nxt.x=p.x+step[i][0]; nxt.y=p.y+step[i][1]; nxt.z=p.z+step[i][2]; if (illegal(nxt)||maze[nxt.x][nxt.y][nxt.z]) continue; if (dist[nxt.x][nxt.y][nxt.z]!=0) continue; q.push(nxt); dist[nxt.x][nxt.y][nxt.z]=dist[p.x][p.y][p.z]+1; if (nxt.x==a-1&&nxt.y==b-1&&nxt.z==c-1) flag=0; } } if (!flag && dist[a-1][b-1][c-1]<=T) return dist[a-1][b-1][c-1]; return -1; } int main() { int cases; // freopen("cases.txt","r",stdin); // freopen("out1.txt","w",stdout); scanf("%d",&cases); while (cases--) { 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 k=0;k<c;k++) { scanf("%d",&maze[i][j][k]); dist[i][j][k]=0; } } } printf("%d\n",bfs()); } return 0; }
    字节跳动内推

    找我内推: 字节跳动各种岗位
    作者: ZH奶酪(张贺)
    邮箱: cheesezh@qq.com
    出处: http://www.cnblogs.com/CheeseZH/
    * 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    在sql server中怎样获得正在执行的Sql查询
    在windows中使用VMWare安装Mac OS 10.7
    Scrspy 命令
    Windows Service 小品
    线程同步(一)
    线程基础必知必会(二)
    线程基础必知必会(一)
    准备工作与简介
    Python 正则表达式急速入门
    SQL Server 每日一题--每月销售额
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/2474855.html
Copyright © 2020-2023  润新知