概要设计书

[TOC]

1.0 编码规范

变量名

变量名使用下划线命名方法

变量定义后,写上该变量的作用及其含义

变量不得使用i,j,k,a,b,c,包括循环变量

循环变了使用iter_i,iter_j这种命名方法

int iter_i; // 循环

for(iter_i = 0;iter_i<10;iter_i++){

.....

}

常量名

常量名使用大写,且常量只能使用const关键字定义,使用宏定义即#define是不被允许的。

使用下划线命名方法。

const int THIS_IS_A_CONST;

函数名

函数名使用驼峰命名法

函数定义后,需要使用注释写清楚,函数的输入类型,返回值类型

当返回值多余一个时,使用指针传参

int maxOfThree(int num1,int num2,int num3){

// 返回三个数的最大值

return max(max(num1,num2),num3);

}

文件名

文件名使用驼峰命名法

文件名格式为name.model.c/cpp

例如 rider.data.c

目录说明

├── main.c 程序入口

├── README.md 项目说明文件

├── lib 自己编写的库文件

├── res 资源文件,包括图像,声音等

└── vendor 第三方资源文件

1.1 输入、输出设计

文件方式

输入格式 < sales.txt

序号 下单时间 餐馆坐标x 餐馆坐标y 食客坐标x 食客坐标y

输出格式 > output.txt

时间单位

账户余额

接单数

完成数

超时数

每位骑手的位置

命令行方式

1.2 算法设计

分区

路程设计

1.3 高层数据结构定义

全局常量定义

START_UP_MONEY 初始金额

HIRE_MONEY 招募一个人需要的资金

DEAD_TIME 超过DEAD_TIME时间单位后,被视为拒单

FINE_DELIVER_TIME 超时时间,第一次超时罚款

FINE_MONEY 第一次超时罚款金额

DEAD_DELIVER_TIME 超时时间,第二次超时倒闭

MONEY_PER_ONE 完成一单获得的钱

MAP_X 地图X大小

MAP_Y 地图Y大小

全局变量定义

RIDER_COUNT 骑手当前数量

TIME 当前时间

全局数据结构定义

地图数据结构

struct MapNode{

int x,y,type; // type:代表此节点为路或者房子

}

订单数据结构

struct Bill{

int id; // 订单id

int start_time; // 订单开始时间

int restaurant_x; // 餐馆位置

int restaurant_y;

int target_x; // 目的位置

int target_y;

}

struct ListBill{ // 订单链表 这里使用双链表,便于查询,实现起来应该是队列

ListBill* pre_bill; // 上一个订单

Bill* cur_bill; // 当前订单

ListBill* next_bill; // 下一个订单

}

骑手数据结构

struct Rider{

int id; // 骑手id

int position_x; // 骑手当前位置

int position_y;

Bill* current_bill; // 骑手当前订单

ListBill* bag; // 骑手背包数据

}

struct ListRider{

ListRider* pre_rider; // 前一个骑手

Rider cur_rider; // 当前骑手

ListRider* next_rider;// 下一个骑手

}

1.4系统模块划分

main.c 程序入口,包括对全局对象(变量)初始化;

void init(); // 初始化

baseFunction/Rider.c

Bill getRiderCurrentBill(int rider_id); // 返回骑手当前bill

BillList getRiderBag(int rider_id); // 返回骑手背包数据

void getRiderPosition(int rider_id,int *x,int *y) // 返回骑手当前位置,指针传参

int buyRider(); // 买骑手,返回骑手id

void riderWalk(int rider_id,int x,int y) // 移动骑手

baseFunction/Bill.c

int getBillCostTime(int bill_id); // 获得从发出订单到现在的时间

int getBillStatus(int bill_id); // 获得订单状态

int getBillRider(int bill_id); // 获得订单骑手编号

void assignBill(int bill_id,int rider_id);// 派单

IO/Input.c

Bill readBill(); // 读入一个Bill

IO/output.c

void printStatus(); // 输出参数

void printMap(); // 输出地图数据

baseStructure/Rider.c

void listRiderAppend(ListRider *List,Rider rider); // 骑手链表加入骑手

baseStructure/Bill.c

void listBillAppend(ListBill *List,Bill bill) // 订单列表添加

algorithm/Assign.c

int getProperRider(int bill_id); // 获取应当的骑手

algorithm/Path.c

void getNextMove(int rider_id,int *x,int *y); // 获取骑手下一步位置

高层算法设计

0x00 算法分析

因为当前未知以后的状态,我们肯定只考虑当前订单以及之前的订单数据所产生的影响,而对未来并不需要预期。

由于在此地图上两点之间到最短距离便于计算,即曼哈顿距离,因此我们只需考虑所走路径和在原有路径上进行微调即可

0x01 基本约定

考虑到现实状况,我们可以将骑手划分,给每个骑手分派区域,这样是比较方便的

算法的核心问题是,如何判定是否顺路的问题,判断当前订单加入背包后可以在当前订单不超时的情况下完成配送。

0x02 贪心算法--解决订单分配任务

由于先前影响已经表现在当前骑手位置,以及骑手背包中,我们可以根据当前的骑手的状态判断最佳分配方案

首先遍历骑手,将此订单加入每个骑手的背包,通过计算得到当前骑手当前背包送完时间,和超时状态

通过判断送完时间的最小值,以及超时状态。得到当前局部最优解,并将订单分配

0x03 遗传算法-解决订单路径问题

我们可以参考TSP问题,将当前配送员的配送顺序当作基因编码,然后通过生成算法,生成最优路径

外卖派单模拟系统C语言代码,GitHub - Sndav/SuperDeliver: 外卖派单模拟系统大作业相关推荐

  1. 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统

    校园导游系统 Qt5 图形界面版本 v2.1.5 更新内容 2019.2.25 Version 2.1.5 新增道路信息查询功能,输入道路起点和终点即可查询道路具体信息 新增范例地图,支持一键录入已有 ...

  2. c语言编写程序判断图的连通,图论期末大作业编程题(如何判断一个4连通4正则图为无爪、无K4图)...

    博士期间估计这可能是唯一一个要编程的作业,搞了半天弄出这个东西,放这里为以后用到的时候查找方便. 说来也是可笑,读博士期间发现大家对上课也都没什么兴趣,老师也是那么回事,都说博士期间学的课程是要有助于 ...

  3. 数据结构-单链表(C语言代码)

    数据结构纯属新手,小白一枚,欢迎批评指正! 直接上代码OVO! 定义结构体 typedef struct Node {int data; //数据域struct Node* next; //指针域 } ...

  4. 链表分解单双数c语言代码,编写一程序,将带头结点的单链表拆成一个奇数链表和一个偶数链表...

    我写了一个,你参考参考! #include #include typedef  struct  node { int data; struct node  *next; }linknode; type ...

  5. C语言sopc蜂鸣器按键弹奏中音,SOPC乐曲演奏大作业.doc

    PAGE 1 综合实验 基于NiosII的乐曲演奏设计 单 位: 班 级: 组 员: 指导老师: 首 都 师 范 大 学 2012年5月 目录 TOC \o "1-3" \h \u ...

  6. 1小时,不会代码的我如何完成 网易云音乐 大作业网页制作?(IVX 第2篇)

    作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者.15-16年曾在网上直播,带领一批程序小白走上程序员之路.欢迎各位小白加我咨询我相关信息,迷茫的你会找到 ...

  7. 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目

    基于matlab数字图像处理GUI代码 代码: function varargout = Image_processing_GUI(varargin) % IMAGE_PROCESSING_GUI M ...

  8. 天津大学仁爱学院c语言期末考试题,天津大学《C语言程序设计》2016年7月考试期末大作业...

    请在以下三组题目中任选一组作答,满分100分. 第一组: 一.编程题(每题20分,共40分) 1.编写程序.每当输入10个评委的分数后,求该选手的最后得分并输出(设10个评委按照以下打分原则为选手打分 ...

  9. C语言课设电子英汉词典系统(大作业)

    一.设计功能(文章仅供参考) a. 词条录入:即添加单词记录. b. 信息显示:将所有的单词按字母顺序显示. c. 词条修改:对已经输入的单词信息进行修改. d. 词条删除:删除某个单词记录. e. ...

最新文章

  1. makefile清除目标文件的规则
  2. cuda linux编译器_CUDA与Linux系统
  3. Qt 图形特效(Graphics Effect)介绍
  4. java list top_Java程序员最常犯的错误盘点之Top 10
  5. MySQL数据库CPU飙升紧急处理方法
  6. win10你的电脑设备需要修复_cf挑战辅助w10蓝屏后若何用命令提示符修复
  7. sql时间小问题汇总
  8. Quartz.NET 学习相关博客
  9. Android PdfViewer预览pdf滚动或放大缩小时模糊然后正常的问题
  10. Android自定义PreferenceScreen的Layout布局,并获取控件
  11. php中百度编辑器的使用
  12. Mac版Charles免费安装及使用
  13. Mac 锁屏防止断网、睡眠、注销登录
  14. 杨帅浙江大学计算机,2013届浙江大学优秀毕业研究生.DOC
  15. 区块链智能合约----Solidity状态修饰符view、pure
  16. Pytho解析器的安装及配置
  17. Mac Safari, Chrome 浏览器劫持 SearchSystem Search 恶意插件移除 尝试Brave浏览器
  18. GIC/ITS代码分析(3)ITS驱动初始化
  19. CentOS Netcat 用法
  20. 【摘记】心:稻盛和夫的一生嘱托

热门文章

  1. public,static,private,protected的用法
  2. 传感器检测技术及仪表笔记02第二章 检测系统的基本特性
  3. 分页功能的实现代码 与 分页查询
  4. [FPGA]1 MRCC与SRCC学习
  5. rust门卡有什么用_屠龙之技! 使用Rust加速你的Python
  6. 小米智能互联电脑版总是弹出_小米智能互联PC版-小米智能互联下载v1.1.0.453-IE浏览器中文网站...
  7. 邦纳视觉镜头LCF08LK1F
  8. Python制作某电商平台商品竞拍脚本,能自动定时、抢拍、购买!吊不吊?
  9. 奥比中光网络深度摄像头——人脸活体检测
  10. 最近某网站泄露密码数据分析