外卖派单模拟系统C语言代码,GitHub - Sndav/SuperDeliver: 外卖派单模拟系统大作业
概要设计书
[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: 外卖派单模拟系统大作业相关推荐
- 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统
校园导游系统 Qt5 图形界面版本 v2.1.5 更新内容 2019.2.25 Version 2.1.5 新增道路信息查询功能,输入道路起点和终点即可查询道路具体信息 新增范例地图,支持一键录入已有 ...
- c语言编写程序判断图的连通,图论期末大作业编程题(如何判断一个4连通4正则图为无爪、无K4图)...
博士期间估计这可能是唯一一个要编程的作业,搞了半天弄出这个东西,放这里为以后用到的时候查找方便. 说来也是可笑,读博士期间发现大家对上课也都没什么兴趣,老师也是那么回事,都说博士期间学的课程是要有助于 ...
- 数据结构-单链表(C语言代码)
数据结构纯属新手,小白一枚,欢迎批评指正! 直接上代码OVO! 定义结构体 typedef struct Node {int data; //数据域struct Node* next; //指针域 } ...
- 链表分解单双数c语言代码,编写一程序,将带头结点的单链表拆成一个奇数链表和一个偶数链表...
我写了一个,你参考参考! #include #include typedef struct node { int data; struct node *next; }linknode; type ...
- C语言sopc蜂鸣器按键弹奏中音,SOPC乐曲演奏大作业.doc
PAGE 1 综合实验 基于NiosII的乐曲演奏设计 单 位: 班 级: 组 员: 指导老师: 首 都 师 范 大 学 2012年5月 目录 TOC \o "1-3" \h \u ...
- 1小时,不会代码的我如何完成 网易云音乐 大作业网页制作?(IVX 第2篇)
作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者.15-16年曾在网上直播,带领一批程序小白走上程序员之路.欢迎各位小白加我咨询我相关信息,迷茫的你会找到 ...
- 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目
基于matlab数字图像处理GUI代码 代码: function varargout = Image_processing_GUI(varargin) % IMAGE_PROCESSING_GUI M ...
- 天津大学仁爱学院c语言期末考试题,天津大学《C语言程序设计》2016年7月考试期末大作业...
请在以下三组题目中任选一组作答,满分100分. 第一组: 一.编程题(每题20分,共40分) 1.编写程序.每当输入10个评委的分数后,求该选手的最后得分并输出(设10个评委按照以下打分原则为选手打分 ...
- C语言课设电子英汉词典系统(大作业)
一.设计功能(文章仅供参考) a. 词条录入:即添加单词记录. b. 信息显示:将所有的单词按字母顺序显示. c. 词条修改:对已经输入的单词信息进行修改. d. 词条删除:删除某个单词记录. e. ...
最新文章
- makefile清除目标文件的规则
- cuda linux编译器_CUDA与Linux系统
- Qt 图形特效(Graphics Effect)介绍
- java list top_Java程序员最常犯的错误盘点之Top 10
- MySQL数据库CPU飙升紧急处理方法
- win10你的电脑设备需要修复_cf挑战辅助w10蓝屏后若何用命令提示符修复
- sql时间小问题汇总
- Quartz.NET 学习相关博客
- Android PdfViewer预览pdf滚动或放大缩小时模糊然后正常的问题
- Android自定义PreferenceScreen的Layout布局,并获取控件
- php中百度编辑器的使用
- Mac版Charles免费安装及使用
- Mac 锁屏防止断网、睡眠、注销登录
- 杨帅浙江大学计算机,2013届浙江大学优秀毕业研究生.DOC
- 区块链智能合约----Solidity状态修饰符view、pure
- Pytho解析器的安装及配置
- Mac Safari, Chrome 浏览器劫持 SearchSystem Search 恶意插件移除 尝试Brave浏览器
- GIC/ITS代码分析(3)ITS驱动初始化
- CentOS Netcat 用法
- 【摘记】心:稻盛和夫的一生嘱托
热门文章
- public,static,private,protected的用法
- 传感器检测技术及仪表笔记02第二章 检测系统的基本特性
- 分页功能的实现代码 与 分页查询
- [FPGA]1 MRCC与SRCC学习
- rust门卡有什么用_屠龙之技! 使用Rust加速你的Python
- 小米智能互联电脑版总是弹出_小米智能互联PC版-小米智能互联下载v1.1.0.453-IE浏览器中文网站...
- 邦纳视觉镜头LCF08LK1F
- Python制作某电商平台商品竞拍脚本,能自动定时、抢拍、购买!吊不吊?
- 奥比中光网络深度摄像头——人脸活体检测
- 最近某网站泄露密码数据分析