递归问题<一>
这几天搞递归,差点没被搞死,先来看看这道题:
一个二维数组例如:
1,2,3
4,5,6
7,8,9
从左上角到右下角,每次只能向下或者向左走一步,求能得到最大和。
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int getmaxpath(vector<vector<int> > list,int r,int l,int side);
int main()
{
int a[3][3] =
{{1,2,3},
{4,5,6},
{7,8,9}};
vector<vector<int> > v;
for(int i = 0 ; i < 3; ++i) //传二维数组太麻烦= =于是我偷懒传向量。
{
vector <int> temp;
for (int j = 0 ; j < 3 ; ++j)
{
temp.push_back(a[i][j]);
}
v.push_back(temp);
}
cout << getmaxpath(v,0,0,3) << endl;
return 0;
}
int getmaxpath(vector<vector<int> > list,int r,int l,int side)
{
if( r == l && l == side - 1) //到了右下角返回这个数
{
return list[r][r];
}
else if(r == side-1) //到了下边界则返回该数右边所有数的和,因为只能往右走了
{
int temp = 0;
for(int i = l; i < side ;++i)
temp += list[r][i];
return temp;
}
else if(l == side-1) //同上,只不过是到了右边界要返回下面所有数的和
{
int temp = 0;
for(int i = r; i < side ;++i)
temp += list[i][l];
return temp;
}
int a,b;
a = getmaxpath(list,r+1,l,side);
b = getmaxpath(list,r,l+1,side);
return list[r][l] + a>b?a:b; //往下走和往右走两种情况中和最大的那种,加上本数返回
}
#include <vector>
using namespace std;
int getmaxpath(vector<vector<int> > list,int r,int l,int side);
int main()
{
int a[3][3] =
{{1,2,3},
{4,5,6},
{7,8,9}};
vector<vector<int> > v;
for(int i = 0 ; i < 3; ++i) //传二维数组太麻烦= =于是我偷懒传向量。
{
vector <int> temp;
for (int j = 0 ; j < 3 ; ++j)
{
temp.push_back(a[i][j]);
}
v.push_back(temp);
}
cout << getmaxpath(v,0,0,3) << endl;
return 0;
}
int getmaxpath(vector<vector<int> > list,int r,int l,int side)
{
if( r == l && l == side - 1) //到了右下角返回这个数
{
return list[r][r];
}
else if(r == side-1) //到了下边界则返回该数右边所有数的和,因为只能往右走了
{
int temp = 0;
for(int i = l; i < side ;++i)
temp += list[r][i];
return temp;
}
else if(l == side-1) //同上,只不过是到了右边界要返回下面所有数的和
{
int temp = 0;
for(int i = r; i < side ;++i)
temp += list[i][l];
return temp;
}
int a,b;
a = getmaxpath(list,r+1,l,side);
b = getmaxpath(list,r,l+1,side);
return list[r][l] + a>b?a:b; //往下走和往右走两种情况中和最大的那种,加上本数返回
}
posted on 2011-08-30 16:02 coder?coder! 阅读(198) 评论(0) 收藏 举报
浙公网安备 33010602011771号