小车在货架上取货的路径

要求:在矩形货架上取货,货物重量随机,小车只能向比之前货物更轻的方向行走,求小车能走的最长路径。

#include<iostream>
#include<vector>
#include<string>
#include<ctime>
#include<vector>
#include<algorithm>
using namespace std;
class solution{
public:
bool pathcore(int* cargo, int i, int j, int width)
{
if ((0 <= i <= width - 1) && (0 <= j <= width))
{
bool a = ((((j - 1) >= 0) && (j - 1 <= width - 1)) && (cargo[i*width + j] > cargo[i*width + j - 1]));
if (a)
{
if (pathvec.size() == 0)
{
pathvec.push_back(i);//
pathvec.push_back(j);//
pathvec.push_back(i);//
pathvec.push_back(j - 1);//
}
else{
pathvec.push_back(i);//
pathvec.push_back(j - 1);//
}


bool cargo1 = pathcore(cargo, i, j - 1, width);
}

bool b = ((((j + 1) >= 0) && ((j + 1) <= width - 1)) && (cargo[i*width + j] > cargo[i*width + j + 1]));
if (b)
{
if (pathvec.size() == 0)
{
pathvec.push_back(i);//
pathvec.push_back(j);//
pathvec.push_back(i);//
pathvec.push_back(j + 1);//
}
else
{
pathvec.push_back(i);//
pathvec.push_back(j + 1);//
}
bool cargo2 = pathcore(cargo, i, j +1, width);
}

bool c=((((i - 1) >= 0) && ((j - 1) <= width - 1)) && (cargo[i*width + j] > cargo[(i - 1)*width + j]) );
if (c)
{
if (pathvec.size() == 0)
{
pathvec.push_back(i);//
pathvec.push_back(j);//
pathvec.push_back(i - 1);//
pathvec.push_back(j);//
}
else{
pathvec.push_back(i - 1);//
pathvec.push_back(j);//
}
bool cargo3 = pathcore(cargo, i-1, j, width);
}
bool d=(((i + 1) >= 0) && ((i + 1) <= width - 1) && (cargo[i*width + j] > cargo[(i + 1)*width + j]));
if (d)
{
if (pathvec.size() == 0)
{
pathvec.push_back(i);//
pathvec.push_back(j);//
pathvec.push_back(i + 1);//
pathvec.push_back(j);//
}
else{
pathvec.push_back(i + 1);//
pathvec.push_back(j);//
}bool cargo4 = pathcore(cargo, i+1, j , width);
}

if ((a||b||c||d)==0)
{
sum.push_back(pathvec);
pathvec.clear();
}
}
else
{
return false;
}
}
bool paths(int* cargo, int width)
{
for (int i = 0; i < width; i++)
{
for (int j = 0; j < width; j++)
{
int maxmum = 10;
bool re=pathcore(cargo, i,j,width);
}
}
return true;
}
void test(int* cargo, int width)
{
if (paths(cargo,width))
{

for (int i = 0; i < sum.size(); i++)
{
for (int j = 0; j < sum[i].size(); j++)
{
cout << sum[i][j] ;
}
cout << endl;
len.push_back(sum[i].size());
}
}
cout << *max_element(len.begin(), len.end())/2.0<<endl;
auto max = *max_element(len.begin(), len.end());


for (int i = 0; i < sum.size(); i++)
{
if (sum[i].size() == max)
{
for (int j = 0; j < sum[i].size(); j++)
{
cout << sum[i][j]<<',';
j++;
if (j == (sum[i].size()-1))
{
cout << sum[i][j] ;
}
else{
cout << sum[i][j]<<"->";
}
}
cout << endl;

}
}
}
private:
vector<int> pathvec;
vector<vector<int>> sum;
vector<int> len;
};
int main()
{
int cargo[100*100];
int maxmum=100;
int width = 100;
srand((unsigned) time(NULL));
cout << "cargo matrix:" << endl;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < width; j++)
{
cargo[i*width+j]=rand() % maxmum;
cout << cargo[i*width+j] << ' ';
}
cout << endl;
}
solution s;
s.test(cargo,width);
return 0;
}

使用前端生成代码 一、需求描述 工程背景 立体仓库管理中,使用智能搬运小车(AGV)在仓库的巷道中来回穿梭和搬运货物。 立体仓库设定 4 层,层与层之间用垂直升降梯连通,每两层之间设置两台升降梯,减少 因为故障引起停工的概率。每层设置纵横相间的货架。设置 2 个充电点,布置在第一和 第三层。 工程功能需求 (1)多任务路径规划。实现单台 AGV 的多任务路径规划,任务包括取货、运输、 放货和充电。其中,取货点包括仓库入库口和货架,放货点包括货架和出库口。运输路 径包括从仓库入库口搬运货物至货架,以及从货架搬至出库口。在完成本次取货-运输- 放货任务,且剩余电量少于阈值(由用户在 UI 界面设定,不少于 10%)的情况下,返 回最近的充电点充电。 (2)路径避障。以可视化的方式设置路障,货架和升降梯以一定的概率发生故障, 引发暂停使用。支持路径避障功能,模拟设备故障时动态绕路。 (3)虚拟可视化与交互需求。利用专业软件(如 Unity 等)构建仓库三维场景, 包括货架、垂直升降电梯、AGV 小车、货箱、充电座等。能够实时显示 AGV 位置、 路径轨迹和货架状态(空闲/占用/故障)。 (4)设计监控界面:支持手动输入货箱存取任务,显示预计完成时间、路径能耗 (结合 AGV 电量模型),异常情况自动报警(如路径堵塞时重新规划等)。 二、数据抽象 将立体仓库货架、巷道、出入库口、垂直电梯和充电点等抽象为图结构,巷道通行 方向分单向和双向,边属性包含通行距离、实时拥堵系数(0-1,模拟传感器对数据动 态更新)等。不同货架设置不同的承重限制,选择放货点和规划路径要考虑承重因素。 三、可能使用的算法 Dijkstra 算法变种,支持多权重的边属性和动态权重更新;A * 算法,满足单 AGV 多任务路径规划,即取货、运输、放货和充电。 取货与目的地地址名字要简化,小车可以实时监控移动路径
06-09
一、需求描述 1. 工程背景 立体仓库管理中,使用智能搬运小车(AGV)在仓库的巷道中来回穿梭和搬运货物。 立体仓库设定 4 层,层与层之间用垂直升降梯连通,每两层之间设置两台升降梯,减少 因为故障引起停工的概率。每层设置纵横相间的货架。设置 2 个充电点,布置在第一和 第三层。 2. 工程功能需求 (1)多任务路径规划。实现单台 AGV 的多任务路径规划,任务包括取货、运输、 放货和充电。其中,取货点包括仓库入库口和货架,放货点包括货架和出库口。运输路 径包括从仓库入库口搬运货物至货架,以及从货架搬至出库口。在完成本次取货-运输- 放货任务,且剩余电量少于阈值(由用户在 UI 界面设定,不少于 10%)的情况下,返 回最近的充电点充电。 (2)路径避障。以可视化的方式设置路障,货架和升降梯以一定的概率发生故障, 引发暂停使用。支持路径避障功能,模拟设备故障时动态绕路。 (3)虚拟可视化与交互需求。利用专业软件(如 Unity 等)构建仓库三维场景, 包括货架、垂直升降电梯、AGV 小车、货箱、充电座等。能够实时显示 AGV 位置、 路径轨迹和货架状态(空闲/占用/故障)。 (4)设计监控界面:支持手动输入货箱存取任务,显示预计完成时间、路径能耗 (结合 AGV 电量模型),异常情况自动报警(如路径堵塞时重新规划等)。 二、数据抽象 将立体仓库货架、巷道、出入库口、垂直电梯和充电点等抽象为图结构,巷道通行 方向分单向和双向,边属性包含通行距离、实时拥堵系数(0-1,模拟传感器对数据动 态更新)等。不同货架设置不同的承重限制,选择放货点和规划路径要考虑承重因素。 三、可能使用的算法 Dijkstra 算法变种,支持多权重的边属性和动态权重更新;A * 算法,满足单 AGV 多任务路径规划,即取货、运输、放货和充电。 取货与目的地地址名字要简化,小车可以实时监控移动路径
06-09
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值