小车在货架上取货的路径

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

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值