runSimulation(Graph &G)

1. 遍历每条道路

2. 遍历该道路的车辆

a. 计算特定时间间隔后的位置

b. 若应行驶至其他道路

进入对应的路口缓冲区,根据路口类的红绿灯对象判断是否能通行。

若能通行,则填至目标道路

若不能,则继续停留在路口缓冲区

c. 若仍停留在原道路

改变该车在当前道路的位置。


  for (auto &road:G.m_Road_v) {

        auto src = road.m_queVehicle;

        decltype(road.m_queVehicle) obj;

        //路内车的遍历

        while (!src.empty()) {

            //弹出一辆车

            auto it = src.front();

            src.pop_front();

            // 当车的时间戳小于实际时间时,才模拟运行

            if (it.time < SYSTEM_TIME) {

                it.fSpec = (100 - road.get_Congestion() - 20) / 3.6;

                dist = it.dDistance + it.fSpec * 10;

                it.time++;



                it.showself();

                //如果车十秒后不在此路

                if (dist >= road.m_dLength) {

                    //路径擦除

                    auto route = it.queRoute;

                    int site = it.m_nSiteRoadID;

                    route.pop();

                    //如果抵达终点

                    if (route.empty()) {

                        cout << "it is be shutdown" << endl;

                        exit(0);

                        // 否侧没有抵达终点

                    } else {

                        //获取所在路和下一条路的ID

                        int next = route.front();

                        //判断红绿灯情况

                        cout << site << endl;

                        G.m_CrossRoad_v[site].m_CTrafficLight_Light.clock(SYSTEM_TIME);

                        //如果可以通行

                        if (G.m_CrossRoad_v[site].m_CTrafficLight_Light.getStatus(it.m_nSiteRoadID, next)) {

                            cout << GREEN << "绿灯通行:" << endl;

                            it.queRoute = route;

                            it.dDistance = 0;

                            it.m_nSiteRoadID = next;

                            auto *site_road = &G.m_Road_v[next].m_queVehicle;

                            site_road->push_back(it);

                            //如果不能通行

                        } else {

                            //将距离置为道路长度,表示正在等候红灯

                            it.dDistance = G.m_Road_v[it.m_nSiteRoadID].m_dLength;

                            cout << YELLOW << "等待红灯" << endl;

                            //车辆塞回去

                            obj.push_back(it);

                        }

                    }

                    //否则,当车十秒后还在此路时

                } else {

                    it.dDistance = dist;

                    obj.push_back(it);

                }

                //否则直接填入

            } else {

                obj.push_back(it);

            }

        }

        road.m_queVehicle = obj;

    }
📅 2019-02-11

1. 从文件(route.txt)中读取路径

形如以下格式


0 1 

0 1 2 

0 1 2 3 

0 1 2 3 4 

0 1 2 3 4 5 

0 1 2 3 4 5 6 

0 1 2 3 4 5 6 7 

其中,一行表示一条可完全畅通的道路编号序列。将所有道路存入v_Route


vector<queue<int>> v_Route;



/**

 * load route from route file

 * @param Map_graph

 */

void loadRoute(Graph &Map_graph) {

    string str_Path;

    ifstream fin_Route(DIR_RES"route.txt");

    while (getline(fin_Route, str_Path)) {

        stringstream ss_Temp(str_Path);

        queue<int> q_Path_Temp;

        int n_Temp;

        while (ss_Temp >> n_Temp) {

            q_Path_Temp.push(n_Temp);

        }

        v_Route.push_back(q_Path_Temp);

    }

}
📅 2019-02-09

介绍

TmWeBlog–微信小程序版WeTypecho魔改版

原项目介绍


众所周知,现在由于移动互联网的普及,网站访问量下降,导致个人站长非常难混。

WeTypecho则能帮您快速搭建微信小程序,将Typecho博客的内容映射到微信小程序。

帮助您在一定程度上获取更多来自微信的流量。WeTypecho的安非常简单,只需三分钟,就能搭建。


原项目自定义的修改版

项目地址

原项目地址

当前项目地址

功能

目前支持的基本功能如下:

  • 首页预览置顶文章
  • 评论,回复,点赞
  • 转发,分享到朋友圈
  • 图片视频显示
  • 支持markdown,html解析

扫码预览

gh_3d207c9d6dd4_258.jpg

ToDoList

  • 留言回复通知

📅 2019-01-26

道路类型的设置


it->m_CTrafficLight_Light.setType(it->JunctionRoad.size());

根据路口道路条数, 设置路灯类型(是T字路口还是+字路口)


/**

 * 交通灯类

 */

class TrafficLight {

public:

    TrafficLight() {

        for (int i = 0; i < 8; i++) {

            roadID[i] = -1;

        }



    };

    void changeStatus();



    void clock(int time);



    void setAllRed();



    void setAllGreen();



    bool getStatus(int from, int to);

    /**

     * 设置灯的类型, 是T字路口还是+字路口

     * @param type 

     */

    void setType(int type) { this->type = type; };

    //路口标号

    // nLeftIn,nLeftOut,nDownIn,nDownOut,nRightIn,nRightOut,nUpIn,nUpOut;

    int roadID[8];

    //路口是否能走通

    bool status[4][4] = {false};

    int type;

    //表示可通过的方向(目标方向)

    //AllRED = 0,LeftGreen = 1,DownGreen = 2,RightGreen = 3,UpGreen = 4,UpDownGreen = 5,LeftRightGreen = 6,cross1 = 7,cross2 = 8

    int emStatus = 0;

    long long int time = 0;

};

对接各路口

📅 2019-01-26

首先,为什么我们需要这个?

因为微信小程序虽然可以可以绘制svg图片,但是在真机调试的时候却渲染不出来。所以我们需要一个工具(可以将svg转成微信小程序支持的canvas并绘制出来)。

我使用的是touch-wx + vs code 开发。

现已启用该开发模式.因为Ubuntu下经常编译不完整

Touch WX 是什么?

Touch WX

Touch WX是一套完全免费的微信小程序开发框架,包含丰富的UI控件用于官方组件的补充。与Touch UI开发方式很相似,也是通过VSCode编辑器+插件的方式开发,经过编译后输出小程序代码。

与其他小程序框架最主要的区别在于:Touch UI完全是基于小程序官方的自定义组件机制实现,输出的是小程序原始代码,而不是输出开发者完全无法阅读的编译代码。这样当遇到问题时,开发者可以很方便的定位问题所在,还可以基于输出的原始代码继续开发。

当你用Touch UI开发了H5应用,可以直接导入到Touch WX进行转换,稍作调整就能生成小程序。反之也同样,当你Touch WX开发了微信小程序,可以导出为Touch UI工程来生成H5应用。

Touch WX 的特点

Touch WX

我的理解

Touch WX 就是一个可以将特定的nodejs项目编译成微信小程序项目的框架

Touch WX更多操作

更多操作见http://www.touchui.io/touchui_doc_wx/

推荐大家看一下,或许会打开新世界的大门哦!

接下来,我默认你已经看了Touch WX的文档,并且拥有一定的nodejs基础

开始流程

安装parse-svg-path

npm install parse-svg-path --save

引入parse-svg-path

var parse = require('parse-svg-path')

使用parse-svg-path

parse(d)

d为svg中的path值

不了解svg?

请转http://www.w3school.com.cn/svg/svg_intro.asp

如何获得path值?


var options = {

            url:"svg的URL",

            success:function(res){

              const ctx = wx.createCanvasContext('myCanvas')

              ctx.setFillStyle('black')

              var match = res.data.match(/d="(.*?)"/);

              var d = match[1];

              console.log(d);

            }

    }

    wx.request(options); 

上图中d就是path值,我这里使用的是正则表达式查找,而且只有一个path,如不一样,请自行modify

📅 2019-01-21
python3 + Django + uwsgi + nginx 配置部署笔记

本文环境

操作系统: Ubuntu 16.04.3

Python版本: 3.5.2

Django版本: 2.0.4

nginx版本: 1.10.3

本文平台为腾讯云1核1G系统

我的项目文件名为: dgutpsy

安装pip3(python3 的pip)


sudo apt-get install python3-pip

2018-04-10-20-07-25.png

安装成功后运行pip3将会出现

2018-04-10-20-09-19.png

安装uwsgi


pip install uwsgi

2018-04-10-20-17-19.png

测试uwsgi运行状态

新建文件test.py


def application(env, start_response):

    start_response('200 OK', [('Content-Type','text/html')])

    return [b"Hello World"]

有些教程说是 return "hello world"

但是这样其实会出现访问空白的情况, 我的是Python3的环境,需要对hello world进行编码.

而如果你是Python2的环境,你应该写return "hello world"

使用uwsgi运行该文件


uwsgi --http :8000 --wsgi-file test.py

此语句的意思是,使用uwsgi运行test.py文件, 采用http模式, 端口8000

2018-04-10-20-44-49.png

访问页面

好啦,可以看到亲切的hello world 就说明uwsgi运行成功了

2018-04-10-20-39-21.png

TIPS: 如果你访问不了,请先检查腾讯云安全组端口是否开放8000端口

安装Django


pip3 install Django

如在python3里面import django没有报错则安装成功.

📅 2019-01-16
(超详细)快速搭建一个简易微信小程序后台网站(上)

本文实践平台:腾讯云(qcloud.com)

首先我们来看看腾讯云官方的解决方案示意图

0.png

看懂了吗?看没看懂都没关系我们开始走一遍就好了。大致步骤如下:

  1. 购买腾讯云微信小程序解决方案

  2. 部署 mysql 实例到云数据库

  3. 部署网站到服务器,使网站外网可访问

  4. 将网站与数据库连接起来

  5. 配置 SSL 证书,使网站可 https 访问

  6. 构建负载均衡,使用户可以通过负载均衡的方式访问

  7. 制作服务器镜像,将可成功访问的服务器复制

  8. 新建 N(N>0)台服务器,将服务器重装为自定义镜像

  9. test

详细如下:

  • 购买腾讯云微信小程序解决方案
  1. 进入腾讯云官网(https://www.qcloud.com)

  1. 选择解决方案>微信小程序解决方案

就选择 3 元新购活动吧,我已经购买过了,就不再这儿演示怎么购买了。

  1. 购买成功之后腾讯云会下发资源。

succeed:此过程成功标志为资源下发成功,以及收到如下站内信。

  • 部署 mysql 实例到云数据库

  1. 根据上图所提供的地址,使用数据库连接工具(如 Navicat)连接数据库进行数据传输。_

  1. 数据传输_

succeed:此过程的成功标志为,在远程数据库中可查看到相应的表和数据

  • 部署网站到服务器,使网站外网可访问
  1. 首先我们对腾讯云下发的 demo 服务器进行重装系统(精神洁癖,不重装不舒服)_

注:不重装的话,网站的根目录在/data/release/php_weapp_demo > _ > * > ** > > **

我这儿装的是 centOS 6.5。版本不同可能会对应的软件安装方式不同。 2.*为服务器安装 apache_ #安装 apache

root@localhost ~]# yum -y install httpd

📅 2019-01-16

C++11引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能方便地获得复杂的类型,还能简化书写,提高编码效率。下面说一下C++中的auto

旧标准

auto其实并不是一个新的关键字,在旧的标准C++98/03中,它代表着“具有自动存储周期的局部变量”。啥意思呢?就是我们平常所说的变量,他与static相对。就是说所有非static类型的都是“具有自动存储期的”。也就是说在旧的标准下。


autoint i =3;//等价于int i=3;

新标准

在C++11中,auto作为一个新的类型指示符(如int,double)来指示编译器的,但是auto申明的变量的类型必须由编译器在编译时期推导出来,也称类型推导。这种类型推导不是C++所独有的,还有很多具备这种能力的语言(如Python,Javascript)。我们先来看一段Python代码


name ="thinkmoon"print"hello,"+ name 

在这里的name是不需要定义类型的,因为这个类型很容易被推导为字符串性,如过要想在C++中实现这种效果,我们可以这样。


#include<iostream>

int main(){

	auto name ="thinkmoon"; 

	std::cout <<"hello,"<< name << std::endl;

	return0;

}

效果是一样的,是不是觉得写起来特别的方便呢?

但是需要注意的是,在C++中这种静态类型推导是发生在编译期间的。而像Python这种动态类型推导却是发生在运行期间的。

auto的基本用法


#include<iostream>

usingnamespace std;

int main(){

auto x =5; 

cout << x << endl;//x被推导为intauto p =newauto(1);    

cout <<"*"<< p <<"="<<*p << endl;//p被推导为

int *constauto*v =&x, u =6; 

cout <<"*"<< v <<"="<<*v <<"\n u="<< u << endl;//v被推导为const int *,u被推导const int

}

对于最后一个类型推导有几个需要注意

  1. v被推导为const int *而这里auto代替int,但是u等于6还是要写的,否则编译器会报错。

  2. u的等号后面只能写整型的变量,否则会报错,因为不能让编译器产生具有二义性的推断。

其实我们学习的时候可以把auto理解为占位符,它只是占着一个位置并不做其它的事情,由编译器将其类型推导出来再用对应的类型去运行,所以这个时候auto的类型推导是不能让编译器产生二义性的。

auto的推导规则


int x =0;auto* a =&x;//auto推导为int,

auto b =&x;//auto推导为int *,即使不申明为指针也能推断为指针

auto& c = x;//auto推导为int,等价于int 

auto d = c;//auto推导为int,auto会抛弃右值的引用类型

const auto e = x;//e是const int类型,

auto f = e;//f是int型constauto&g = x;//g是const 

int & auto & h = g;  //h是const int & 

总结:

📅 2019-01-16

最开始,我就是用github-page部署博客的,刚开始的时候github-page是不支持自定义域名https的,所以你一定得用默认域名*.github.io才能使用https,要么嘛,你就放弃使用https。

那些不堪回首的博客迁移史

1. 最初的wordpress

刚开始的wordpres是放在我的服务器上的,而且还是与微信公众号对接好的(有相关插件),然后可以加很多牛逼的插件,完成一些很神奇的效果。我当时是装了蛮多插件的,比如:Jetpack全套啊,SMTP,All of SEO等等。好玩是好玩,但是对于我这种隔几天就要折腾一下服务器的。wordpress经常被我玩坏。然后开始寻找解决方案。

2. 后来的wordpress官网

wordpress的官网是支持托管网站的,而且免费。再加上怎么玩都不会坏。但是同时免费版也限制了很多功能。比如,自定义插件啦,自定义域名之类的。其实这都能够接受,最让我无法忍受的是学校的网络,访问起来特别慢。大约一个页面要5秒中左右才开始渲染。强迫症不能忍

3. 轻量的gitblog

这是一个好东西,也是这个让我接触到了page服务这种东西,有关gitblog的更多可以看我这篇文章使用gitblog搭建个人博客.md, 其实除了小众之外没什么别的不好。但是我那颗不甘平静的心依旧想要折腾。

4. 未配置成功的Jekyll

不知道是当时认知有限还是英语太差,总之我按着官网的教程没安装成功,再加上不太喜欢官网的主题,然后就放弃了。

5. 模仿大佬的github issue

一次偶然的机会,我发现有位大佬居然是用issue写博客的(现在才知道原来并不稀奇)

,读者一般都是github用户,评论交流起来简直不要太爽。按奈不住的我立马也这样做了。疯狂过后,就是一个人的寂寞。没有人看我不觉得奇怪,主要百度不收录哇。而且域名没在中国备案,很多事情都做不了,比如微信不能打开。

6. 新奇的hexo

我就不介绍了,有兴趣自行百度。到现在为止我还是用hexo的。

7. hexo的评论系统

最开始,用的是多说,后来下线了。

后来,用的是畅言,然后强制加广告了。

现在用的是,gitcomment,使用的是github帐号登录,缺点就是每个页面评论都要初始化。

听说Disqus不错,可是需要翻墙,不翻墙就要装个插件用精简版。

我就不改,先缓一缓。

8. hexo的托管平台选择

如前言

不过要注意有个坑,自定义域名的话,就是一定要在source文件夹中新建一个CHANME文件里面写上你的域名,不然就每次hexo d 都要设置一次。

9. hexo 的IDE选择

最开始我是用小书匠,不过写文章不错,写代码就不行。比如要改个样式什么的就非常麻烦。

后来用的是coding的webIDE,当时感觉描述很不错,事实上在网速好的情况下的确不错。但是一遇到网速不好的时候。写的代码就完全保存不了, 因为它会回退,会回退啊~

现在,用的是vs code写文章用小书匠,因为叼。

10. hexo的图床选择

用过一段时间github,后来感觉github页面放个图床会让人感觉不好。

现在用的是七牛云存储。

coding-page与github-page的优缺点

  • github百度不会爬,需要自己推送(也可以用cdn回源域名加速)

  • coding-page 短时间推送次数过多就会凉。

  • github只能设置一个域名,而且https只支持顶级域名

所以我的访问人数又要重新累计了。

待续

本文用作测试插件


var function(){

  //预计一大波人即将取关

  console.warn("You have been slained");

}

hexo-admin 测试中

📅 2019-01-16
醉月老哥的微信助手

前言

醉月老哥的微信助手:

不要问我为什么起这个名字,我也不知道!

这两天天气冷,在脑海里构想这个,之后便开始着手做了。

开始日期:2017年12月15日 13时47分25秒

醉月老哥的微信助手

功能定位

立志做一个对接全网内容的助手,其内容包括但不限于:糗事百科,今日头条,简书,MSDN,php.net,百度翻译,搜索引擎。争取做到微信在手,天下我有!有好的想法或者建议欢迎联系我!

特别感谢: @Goff, @Annabel

现有功能介绍

1. 糗事百科

使用说明

公众号回复"糗事百科"

效果展示

糗事百科:效果展示

:TODO

虽然看似基本功能完成了,但是会有一个小问题:

当爬取的内容为,图片分享时,并不能展示其对应的图片

2. 今日头条

今日头条-使用说明

公众号回复“今日头条"

今日头条-效果展示

今日头条:效果展示

今日头条-:TODO

我怎么感觉这个娱乐新闻偏多呢?(是头条热点的问题?)

1.将内容集中与政治,社会,科技

3. 醉月老哥的微信助手

醉月老哥的微信助手-使用说明

公众号回复"醉月老哥的微信助手"

醉月老哥的微信助手-效果展示

醉月老哥的微信助手:效果展示

4.搜索新闻

搜索新闻-使用说明

回复’news(关键词)‘搜索新闻,例如news(江歌),搜索关于江歌的新闻

搜索新闻-效果展示

enter description here

搜索新闻-:TODO

让新闻来源可指向

公众号二维码

enter description here

源代码地址

醉月老哥的微信助手

更新说明

更新说明

📅 2019-01-16