题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=523

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
/*
    用普通搜索TLE,已知起点和终点,可以考虑双向广搜或A*算法加速搜索
    双向广搜,一个方向从出发点向终点搜索,一个方向从终点向出发点搜索,搜索到相同的结点时,即找到最短路径。
*/
;
][] = {
    ,,,  -,,,
    ,,,  ,-,,
    ,,,  ,,-
};
int mp[N][N][N];
int vis[N][N][N];//访问标记: 0没有访问过  1 被从开始到终点的方向访问过  2 被终到始的方向访问过
int step[N][N][N];
int h, m, n;
int times;
struct Node {
    int z, x, y;
    int step;
    Node(int _z, int _x, int _y){
        z = _z; x = _x; y = _y;
    }
};

int bfs()
{
    ][m-][n-] == ) ;//终点可能是墙...
    memset(&vis[][][], , sizeof(vis));
    memset(&step[][][], , sizeof(step));
    Node start(, , );
    vis[][][] = ;
    Node end(h-, m-, n-);
    vis[h-][m-][n-] = ;
    queue<Node> que;
    que.push(start);
    que.push(end);
    while(!que.empty()){
        Node cur = que.front();
        que.pop();
        if(cur.step > times) continue;
        int cx = cur.x, cy = cur.y, cz= cur.z;
        ; i<; i++){
            ];
            ];
            ];
             || tz< || ty< || tz>=h || tx>=m || ty >=n) continue;
            ) continue;
            ){
                Node next(tz, tx, ty);
                step[tz][tx][ty] = step[cz][cx][cy]+;
                vis[tz][tx][ty] = vis[cz][cx][cy];//访问标记要保持一致
                que.push(next);
            } else if(vis[tz][tx][ty] != vis[cz][cx][cy]){//如果访问标记不一致,则说明来自不同方向上搜索的相遇的结点
                 <= times? step[cz][cx][cy]+step[tz][tx][ty]+: -;
            }

        }

    }
    ;
}

int main()
{
    //INPUT;
    //OUTPUT;
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d%d%d", &h, &m, &n, &times);
        ; i<h; i++){
            ; j<m; j++){
                ; k<n; k++){
                    scanf("%d", &mp[i][j][k]);
                }
            }
        }
        printf("%d\n", bfs());
    }

    ;
}

nyoj 523 双向广搜的更多相关文章

  1. HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?

    这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others)  ...

  2. 双向广搜 POJ 3126 Prime Path

      POJ 3126  Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16204   Accepted ...

  3. 双向广搜 codevs 3060 抓住那头奶牛

    codevs 3060 抓住那头奶牛 USACO  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 黄金 Gold   题目描述 Description 农夫约翰被告知一头逃跑奶牛 ...

  4. 双向广搜+hash+康托展开 codevs 1225 八数码难题

    codevs 1225 八数码难题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Yours和zero在研究A*启 ...

  5. 【双向广搜+逆序数优化】【HDU1043】【八数码】

    HDU上的八数码 数据强的一B 首先:双向广搜 先处理正向搜索,再处理反向搜索,直至中途相遇 visit 和 队列都是独立的. 可以用一个过程来完成这2个操作,减少代码量.(一般还要个深度数组) 优化 ...

  6. poj 3131 Cubic Eight-Puzzle 双向广搜 Hash判重

    挺不错的题目,很锻炼代码能力和调试能力~ 题意:初始格子状态固定,给你移动后格子的状态,问最少需要多少步能到达,如果步数大于30,输出-1. 由于单向搜索状态太多,搜到二十几就会爆了,所以应该想到双向 ...

  7. 万圣节后的早晨&&九数码游戏——双向广搜

    https://www.luogu.org/problemnew/show/P1778 https://www.luogu.org/problemnew/show/P2578 双向广搜. 有固定起点终 ...

  8. Eleven puzzle_hdu_3095(双向广搜).java

    Eleven puzzle Time Limit: 20000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. nyoj 613 免费馅饼 广搜

    免费馅饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...

随机推荐

  1. 无穷字符串问题--CSDN上的面试题(原创)

    网上看到一道奇怪的题,分享一下:http://hero.csdn.net/Question/Details?ID=307&ExamID=302 发布公司:CSDN 有 效 期:2014-02- ...

  2. c语言,string库函数strstr实现

    说明: 原型:char *strstr(char *haystack, char *needle); 用法:#include <string.h> 功能:从字符串haystack中寻找ne ...

  3. Devexpress XtraReports 交叉报表

    [原创]Devexpress XtraReports 系列 5 创建交叉报表   昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 ...

  4. 关于SqlDataAdapter的使用

    原文传送门 如果使用SqlDataAdapter来查询数据返回给DataSet或者DataTable时需要注意以下几点:1.如果SqlDataAdapter的SelectCommand的连接并没有打开 ...

  5. MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能...

    MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能... MingQQ目前支持的功能如下:1.支持普通方式登录.验证码方式登录.注销.保持在线.改变在线状态.2.支持 ...

  6. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP

    上节我们提到了使用基于注解实现的AOP,这节我们将用基于xml配置的方式来实现的AOP. 1.首先建立一个类,作为切面类,这个类主要用来实现注解中各种通知要实现的方法. package com.yan ...

  7. STM8S TIM4 初始化设置

    #define TIM4_DIV1 (unsigned char)0 #define TIM4_DIV2 (unsigned char)1 #define TIM4_DIV4 (unsigned ch ...

  8. Hadoop 实现多文件输出

    比如word.txt内容如下: aaa bbb aba abc bba bbd bbbc cc ccd cce 要求按单词的首字母区分单词并分文件输出 代码如下: LineRecordWriter p ...

  9. eclipse调试java调用matlab程序的7.17dll找不到的问题

    经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...

  10. 【stanford C++】——2.C++中函数

    1. main()函数 C++程序从main()函数开始执行: int main() { /* ... code to execute ... */ } 按照约定,main函数应该返回0,除非程序遇到 ...