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

Day1 BFS算法的学习和训练

​ 因为自己的原因,之前没有坚持做算法的相应学习,总是觉得太难就半途而废,真的算是一个遗憾了,所以现在开始,定一个30天入门学习算法计划。

​ 我是根据《算法图解》的顺序进行安排的,自己对散列表和递归调用栈还算有点初步的了解,所以从图算法开始了,希望markdown能一直写下去,自己学习算法能一直坚持下去。

​ BFS给我的感觉是用于图的搜索算法。

​ 看书的时候自己有这么几个疑问:

Q1:它是一个搜索算法,那么它计数是在哪记的?

Q2:C++的队列怎么快速创建?有哪些api?(因为只在数据结构对队列有所了解,感觉应该不可能手写结构体和函数吧0.0)

(hhhh萌新问题嘛)

这里有篇随笔感觉对我这种入门辣鸡的萌新很友好https://blog.csdn.net/jiange702/article/details/81365005

#include<iostream>
using namespace std;
#include<string>
#include<stdio.h>
#include<queue> //这里就解决了我的Q2问题,是直接用头文件引入就好啦

/*
 *BFS算法的模板就大概是
 1.创建队列
 2.push头节点
 3.循环
 {
 1.以队列不为空为条件
 2.pop出头节点
 3.根据题目条件进行判
 4.push进头节点的子节点
 }
 */
void BFS()
{
    memset(visited, 0, sizeof(int));
    queue<co> q;
    co A;
    A.x = 0;
    A.y = 0;
    visited[0][0] = 1;
    zhen[0][0].x = 0;
    zhen[0][0].y = 0;
    
    q.push(A);  
    while(!q.empty())
    {
        co te = q.front();
        q.pop();    //弹出队列 
        
        if(te.x==4 && te.y== 4)
        {
            return; 
        }
        for(int i = 0; i < 4; i++)
        {
            int tx = te.x + xx[i];
            int ty = te.y + yy[i];
            if(tx<0 || ty<0 || tx>4 || ty>4 || visited[tx][ty]==1)
                continue;
            visited[tx][ty] = 1;
            co child;
            child.x = tx;
            child.y = ty;
            q.push(kao);
            zhen[tx][ty].x = te.x;
            zhen[tx][ty].y = te.y;//这里是记录子节点的来源坐标,是由于这个“迷宫”题目要求的坐标,但这里也可以改成zhen[tx][ty] = zhen[te.x][te.y] + 1;这里就解决了我Q1问题,可以记录最短路径数
        }
     } 
 } 

今天的训练是LeetCode102 二叉树的层次遍历

代码如下:

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
    queue<TreeNode*> q,p;
    q.push(root);
    p.push(root);
    while(!q.empty() || !p.empty())
    {
        TreeNode* t1 = q.front();
        q.pop();
        TreeNode* t2 = p.front();
        p.pop();
        if(t1 == NULL && t2 == NULL)    continue;
        if(t1 == NULL || t2 == NULL)   return false;
        if(t1->val != t2->val)  return false;
        q.push(t1->left);
        q.push(t1->right);
        p.push(t2->right);
        p.push(t2->left);
    }
        return true;
    }
};

转载于:https://www.cnblogs.com/kiznaiver1998/p/10745475.html

相关文章:

  • 使用DataWorks来调度AnalyticDB任务
  • 好程序员分享ApacheSpark常见的三大误解
  • 2017-12-05 JavaScript实现ZLOGO子集: 前进+转向
  • 阿里云性能测试 PTS 上手体验
  • FastDfs 分布式文件系统 安装与配置 (实测成功)
  • 读JVM(深入理解Java虚拟机)笔记(一)
  • Vue之坑
  • flask 第七章 简陋版智能玩具 +MongoDB初识和基本操作
  • 4-1 requests库的安装
  • 学起来:Flutter将支持桌面应用开发
  • 基于binlog方式搭建MySQL主从
  • C# 虹软SDK视频人脸识别和注册
  • redis-主从复制
  • 再见 异步回调, 再见 Async Await, 10 万 个 协程 的 时代 来 了
  • 007《loom》 Chrome翻录网页视频神器
  • 【面试系列】之二:关于js原型
  • ➹使用webpack配置多页面应用(MPA)
  • 2017年终总结、随想
  • iOS 系统授权开发
  • java 多线程基础, 我觉得还是有必要看看的
  • nginx 负载服务器优化
  • Node + FFmpeg 实现Canvas动画导出视频
  • Rancher如何对接Ceph-RBD块存储
  • Spring-boot 启动时碰到的错误
  • Vue ES6 Jade Scss Webpack Gulp
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序01:wepy框架整合iview webapp UI
  • 容器镜像
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​TypeScript都不会用,也敢说会前端?
  • ​业务双活的数据切换思路设计(下)
  • #100天计划# 2013年9月29日
  • (1)STL算法之遍历容器
  • (笔试题)分解质因式
  • (第二周)效能测试
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (转载)OpenStack Hacker养成指南
  • ***检测工具之RKHunter AIDE
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @requestBody写与不写的情况
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C/C++随笔] char与unsigned char区别
  • [docker]docker网络-直接路由模式
  • [Everyday Mathematics]20150130