贪吃蛇 C++
现在有一个N*M(N,M=100)的方形矩形,在这个矩形的每一个方格上都放有一个随机值,一条可爱的小蛇从矩形的 左上角开始出发,每次移动都只能移动一格,向右或向下,而每到达一格贪吃的小蛇都会吧该位置上的值吃个一干二净,直到到达右下角时停止。而贪吃的小蛇不怕撑死,它只想吃到最多,并输出路径。
输入行列,输入矩形,以空格键和回车隔开;输出吃的最大量以及路径;
示例:
3 4
15 -4 1 2
-5 9 12 2
20 -2 -3 1
输出:
35
15 -4 9 12 2 1
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct lujing
{
int ml;//记录该位置吃的最大量
string lu;//记录路径;
};
int main()
{
int m, n, k; lujing h;
h.ml = 0; h.lu = "";
scanf("%d", &m); scanf("%d", &n);//m行,n列;
vector<vector<lujing>> b(m, vector<lujing>(n, h));
vector<vector<int>> a(m, vector<int>(n));
for(int i=0;i<m*n;++i)
{
scanf("%d", &k); a[i / n][i % n] = k;
}
b[0][0].ml = a[0][0]; b[0][0].lu += to_string(a[0][0]);
for (int i = 1; i < m; ++i)
{
b[i][0].ml = a[i][0] + b[i - 1][0].ml;
b[i][0].lu = b[i - 1][0].lu;
b[i][0].lu += " ";
b[i][0].lu += to_string(a[i][0]);
}
for (int i = 1; i < n; ++i)
{
b[0][i].ml = a[0][i] + b[0][i-1].ml;
b[0][i].lu = b[0][i - 1].lu;
b[0][i].lu += " ";
b[0][i].lu += to_string(a[0][i]);
}
for(int sum=2;sum<m+n-1;++sum)//sum为i,j的和,方便斜着遍历整个地图;
{
for(int i=1;i<m;++i)
{
if(sum-i<n&&sum-i>0)
{
if(b[i - 1][sum - i].ml> b[i][sum - i - 1].ml)h = b[i - 1][sum - i];
else h = b[i][sum - i - 1];
b[i][sum - i].ml = h.ml + a[i][sum-i];
b[i][sum - i].lu = h.lu;
b[i][sum - i].lu += " ";
b[i][sum - i].lu += to_string(a[i][sum - i]);
}
}
}
cout << b[m - 1][n - 1].ml<<endl<< b[m - 1][n - 1].lu;
return 0;
}
一道较简单题,主要记录路径有点麻烦