//構建一個矩陣,值區間爲[1,5]。從左上角向右下角移動,每次移動一位,且只能右移、下移。求權值最大的路徑
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <time.h>
#include <stdlib.h>
#define DEPTH 8
#define WIDTH 10
template<class T, int D, int W>
class Matrix{
public:
Matrix() : m_nDepth(D), m_nWidth(W){
srand( time(0) );
}
public:
void make(){
for(int i=0; i<m_nDepth; i++){
for(int j=0; j<m_nWidth; j++){
m_Data[i][j] = rand() % 5 + 1;
}
}
}
void print(){
for(int i=0; i<m_nDepth; i++){
for(int j=0; j<m_nWidth; j++){
cout << m_Data[i][j] << " ";
}
cout << endl;
}
}
T compute(int x=0, int y=0){
if(x >= m_nWidth || y >= m_nDepth)
return 0;
T right = compute( x+1, y );
T down = compute( x, y+1 );
return max(right, down) + m_Data[y][x];
}
private:
T m_Data[W][D];
int m_nWidth;
int m_nDepth;
};
int _tmain(int argc, _TCHAR* argv[])
{
Matrix<int, DEPTH, WIDTH> matrix;
matrix.make();
matrix.print();
cout << "Sum: " << matrix.compute() << endl;
getchar();
return 0;
}