1.8*8的方格,从上往下列的编号 8,7,6,5,4,3,2,1,从左往右的编号a,b,c,d,e,f,g,h。给定起点坐标(a8),后重点坐标(h1),求最大路径。
先走对角,在走直线。共八个方向。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int min(int a, int b)
{
return a < b ? a : b;
}
void GetPath(char S[], char T[],vector<string> &path)
{
if (S[0]<'a' || S[0]>'z' || S[1]<'1' || S[1]>'8' || T[0]<'a' || T[0]>'z' || T[1]<'1' || T[1]>'8')
return;
int rowError = S[1] - T[1];
int colError = T[0] - S[0];
int step = 0;
if (rowError == 0 && colError == 0) return;
if (rowError == 0 && colError>0)
{
for (int i = 0; i < abs(abs(colError) - abs(rowError)); i++)
path.push_back("R");
}
else if (rowError == 0 && colError < 0)
{
for (int i = 0; i < abs(abs(colError) - abs(rowError)); i++)
path.push_back("L");
}
else if (rowError > 0 && colError >= 0) //向右下走
{
for (int i = 0; i < min(abs(rowError), abs(colError)); i++)
path.push_back("RD");
for (int i = 0; i < abs(abs(colError) - abs(rowError)); i++)
if (abs(colError)<abs(rowError)) path.push_back("D");
else path.push_back("R");
}
else if (rowError > 0 && colError <= 0) //左下
{
for (int i = 0; i < min(abs(rowError), abs(colError)); i++)
path.push_back("LD");
for (int i = 0; i < abs(abs(colError) - abs(rowError)); i++)
if (abs(colError)<abs(rowError)) path.push_back("D");
else path.push_back("L");
}
else if (rowError < 0 && colError >= 0) //右上
{
for (int i = 0; i < min(abs(rowError), abs(colError)); i++)
path.push_back("RU");
for (int i = 0; i < abs(abs(colError) - abs(rowError)); i++)
if (abs(colError)<abs(rowError)) path.push_back("U");
else path.push_back("R");
}
else //左上
{
for (int i = 0; i < min(abs(rowError), abs(colError)); i++)
path.push_back("LU");
for (int i = 0; i < abs(abs(colError) - abs(rowError)); i++)
if (abs(colError)<abs(rowError)) path.push_back("U");
else path.push_back("L");
}
}
int main()
{
char S[5]; //start
char T[5]; //end
while (cin >> S)
{
cin >> T;
if (strlen(S) > 2 || strlen(T) > 2) continue;
vector<string> path;
GetPath(S, T, path);
cout << path.size() << endl;
for (unsigned int i = 0; i < path.size(); i++)
cout << path[i] << endl;
}
return 0;
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool Judge(vector<vector<int> > timeRange, int sum, int curDay, vector<int> &temp)
{
bool isYes = false;
if (curDay == timeRange.size()) return isYes;
for (int i = timeRange[curDay][1]; i >= timeRange[curDay][0]; i--)
{
temp.push_back(i);
if (sum == i || Judge(timeRange, sum - i, curDay + 1, temp))
{
return true;
}
temp.pop_back();
}
return isYes;
}
int main()
{
int days, sum;
while (cin >> days >> sum)
{
vector<vector<int> > timeRange(days, vector<int>(2, 0));
for (int i = 0; i < days; i++)
{
cin >> timeRange[i][0] >> timeRange[i][1];
}
vector<int> re;
bool isYes = Judge(timeRange, sum, 0, re);
if (!isYes) cout << "No" << endl;
else
{
cout << "Yes" << endl;
for (int i = 0; i < re.size(); i++)
cout << re[i] << " ";
cout << endl;
}
}
return 0;
}