要求:在矩形货架上取货,货物重量随机,小车只能向比之前货物更轻的方向行走,求小车能走的最长路径。
#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;
}