# 荔刻出发 用算法运送 长安的荔枝 **Repository Path**: naitang_room/lichee ## Basic Information - **Project Name**: 荔刻出发 用算法运送 长安的荔枝 - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-21 - **Last Updated**: 2025-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 荔枝使者:深圳到西安最优运输路线 ## 项目概述 "荔枝使者"是一个交互式网页应用,模拟唐代"一骑红尘妃子笑"的荔枝运输难题,使用现代技术计算从深圳(代表南方产地)到西安(古长安)运输荔枝的最优路线。项目结合了历史文化背景与现代算法技术,通过可视化方式展示不同路线选择的时间和费用成本。 ![项目首页截图](./images/md/homepage.png) ## 功能特点 ### 1. 荔枝图片轮播展示 项目包含一个自动轮播的图片展示区,展示荔枝及其运输相关的图片,让用户直观了解荔枝的特点和运输场景。 ### 2. 城市网络可视化 使用SVG技术绘制中国主要城市之间的运输网络,包括城市节点和连接线,并在连接线上标注时间和费用信息。 ![城市网络图](./images/md/city_network.png) ### 3. 多种优化目标 支持三种不同的优化目标: - 最短时间:优先考虑运输时间 - 最低费用:优先考虑运输成本 - 综合优化:根据用户设定的权重平衡时间和费用 ### 4. 断路模拟 支持模拟特定路段断路的情况,系统会自动重新计算最优路径,展示在紧急情况下的备选方案。 ![断路模拟](./images/md/road_block.png) ## 技术实现 ### 前端技术 - **HTML5/CSS3**:构建页面结构和样式 - **JavaScript**:实现交互功能和算法计算 - **SVG**:绘制城市网络图和路径可视化 ### 核心算法 项目使用**A*算法**计算最优路径,该算法是一种启发式搜索算法,结合了Dijkstra算法和贪心最佳优先搜索的优点: 1. 使用实际成本和启发式估计成本的组合来评估路径 2. 通过优先队列管理待探索的节点 3. 支持多种成本函数(时间、费用或加权组合) ```javascript // A*算法核心实现 function aStar(graph, start, end, costType = 'time', weight = 0.5) { // 开放集和关闭集 let openSet = new PriorityQueue(); let closedSet = new Set(); let cameFrom = {}; let gScore = {}; let fScore = {}; // 初始化 for (let node in graph) { gScore[node] = Infinity; fScore[node] = Infinity; } gScore[start] = 0; fScore[start] = heuristic(start, end, costType, weight); openSet.enqueue(start, fScore[start]); while (!openSet.isEmpty()) { let current = openSet.dequeue().element; if (current === end) { return { path: reconstructPath(cameFrom, current), timeCost: calculateCost(graph, reconstructPath(cameFrom, current), 'time'), moneyCost: calculateCost(graph, reconstructPath(cameFrom, current), 'money') }; } closedSet.add(current); for (let neighbor in graph[current]) { if (closedSet.has(neighbor)) continue; // 计算临时gScore let edgeData = graph[current][neighbor]; let timeCost = edgeData.time; let moneyCost = edgeData.money; let totalCost = weight * timeCost + (1 - weight) * moneyCost; let tentativeGScore = gScore[current] + totalCost; if (!openSet.includes(neighbor)) { openSet.enqueue(neighbor, Infinity); } if (tentativeGScore >= gScore[neighbor]) { continue; } cameFrom[neighbor] = current; gScore[neighbor] = tentativeGScore; fScore[neighbor] = gScore[neighbor] + heuristic(neighbor, end, costType, weight); openSet.updatePriority(neighbor, fScore[neighbor]); } } return null; // 没有找到路径 } ``` ### 数据结构 项目使用以下数据结构: 1. **城市图**:使用邻接表表示城市之间的连接关系,每条边包含时间和费用信息 2. **优先队列**:用于A*算法中管理待探索的节点 3. **城市坐标**:用于计算启发式函数和可视化城市位置 ## 使用说明 ### 基本操作 1. 打开页面后,可以查看荔枝图片轮播和城市网络图 2. 在控制面板中选择优化目标(最短时间、最低费用或综合优化) 3. 如果选择"综合优化",可以调整时间权重(0-1之间) 4. 可以选择模拟某条路线断路 5. 点击"计算最优路径"按钮,查看计算结果 6. 结果会在地图上高亮显示,并在下方显示详细信息 ![使用演示](./images/md/usage_demo.png) --- *注:本项目仅作为电视剧为灵感算法演示和历史文化普及,实际运输路线和成本可能与现实情况有所差异。*