当前位置: 首页 > news >正文

POJ-3984-迷宫问题-BFS(广搜)-手写队列

题目链接:http://poj.org/problem?

id=3984

这个本来是个模板题,可是老师要去不能用STL里的queue,得自己手写解决。ORZ....看别人的博客学习。新技能get。。。

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define LL long long
using namespace std;
int Map[10][10];
int last=0,total=1;         //  total为队列总元素,last为先驱标记。
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
struct node
{
    int x,y,pre;
}q[30];
bool Isok(int x,int y)      //  推断时候在迷宫内部。决定时候继续往下搜;
{
    if(x<0||y<0||x>4||y>4||Map[x][y]) return false;
    else return 1;
}
void print(int i)           //  自己定义输出函数,调用递归,利用递归原理能够非常轻松的从后往前输出。
{
    if(q[i].pre!=-1){       //  先驱为-1位起点;
        print(q[i].pre);
        printf("(%d, %d)\n",q[i].x,q[i].y);
    }
}
void bfs(int x,int y)
{
    q[last].x=x;
    q[last].y=y;
    q[last].pre=-1;                 //  起点,先驱标记为-1;
    while(last<total){              //  推断队列是否为空;
        for(int i=0;i<4;i++){       //  四个方向搜索。
            int a=q[last].x+dir[i][0];
            int b=q[last].y+dir[i][1];
            if(Isok(a,b)){
                //cout<<a<<' '<<b<<endl;
                Map[a][b]=1;
                q[total].x=a;
                q[total].y=b;
                q[total].pre=last;  //  记录先驱;
                total++;            //  入队;
            }
            if(a==4&&b==4){
                print(last);
            }
        }
        last++;         //  出队。
    }
}
int main()
{
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            scanf("%d",&Map[i][j]);
        }
    }
    printf("(0, 0)\n");
    bfs(0,0);
    printf("(4, 4)\n");
    return 0;
}


 

转载于:https://www.cnblogs.com/gavanwanggw/p/6897840.html

相关文章:

  • rowid去重(删除表的重复记录)
  • 完整的solr java api操作代码块
  • scala 学习笔记--闭了个包
  • JavaScript使用正則表達式
  • Java 修改页面排序条件
  • Redis3.x HA 方案(基于 Sentinel 方式)
  • android自带的处理Bitmap out Memory 的处理,我仅仅是改变了些写法成为自己用的东西...
  • 卫星宽带
  • Tomcat Manager用户名和密码
  • 《嵌入式系统可靠性设计技术及案例解析》读书笔记(四)
  • POJ 1700 经典过河问题(贪心)
  • 猴子 JDFZ模拟赛
  • 从输入URL到页面加载发生了什么
  • Filter配置多个url-pattern
  • 单元测试初入
  • [数据结构]链表的实现在PHP中
  • 【5+】跨webview多页面 触发事件(二)
  • Angular4 模板式表单用法以及验证
  • CSS魔法堂:Absolute Positioning就这个样
  • Date型的使用
  • docker容器内的网络抓包
  • JavaScript服务器推送技术之 WebSocket
  • Laravel核心解读--Facades
  • Linux中的硬链接与软链接
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • React-redux的原理以及使用
  • Ruby 2.x 源代码分析:扩展 概述
  • Twitter赢在开放,三年创造奇迹
  • uva 10370 Above Average
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 工作手记之html2canvas使用概述
  • 基于 Babel 的 npm 包最小化设置
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 让你的分享飞起来——极光推出社会化分享组件
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 物联网链路协议
  • 系统认识JavaScript正则表达式
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (pytorch进阶之路)扩散概率模型
  • (rabbitmq的高级特性)消息可靠性
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三)Honghu Cloud云架构一定时调度平台
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)我也是一只IT小小鸟
  • .Net FrameWork总结
  • .Net Winform开发笔记(一)
  • .NET简谈设计模式之(单件模式)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET是什么
  • .NET文档生成工具ADB使用图文教程