给定M*N矩阵,从左上角到右下角,每次向下走一步或向右走一步,到右下角时,路上所取数字之和最小。
#include
<
iostream.h
>
#include < string .h >
const int N = 8 ;
const int M = 9 ;
const int a[N][M] = ... {
...{9,3,0,8,9,10,5,8,9},
...{6,8,-5,10,0,-5,6,9,3},
...{8,6,1,8,5,4,0,2,-4},
...{9,9,-6,4,-6,7,4,3},
...{-1,7,1,8,2,7,2,10,7},
...{6,-3,-3,7,1,8,9,0},
...{0,7,0,2,-6,10,8,-8,5},
...{3,10,8,8,9,2,9,6,4},
} ;
int f[N][M];
void main()
... {
int i , j;
int tmp =0;
memset(f,0,sizeof(f));
for(i = 0 ; i < N ; ++i)
...{
tmp +=a[i][0];
f[i][0] = tmp;
}
tmp = 0;
for( j = 0 ; j < M ; ++j)
...{
tmp += a[0][j];
f[0][j] = tmp;
}
for( i = 1; i <N ; ++i)
for( j =1 ; j < M ; ++j)
...{
if(f[i][j-1] > f[i-1][j] )
...{
f[i][j] = f[i-1][j] + a[i][j];
}
else
...{
f[i][j] = f[i][j-1] + a[i][j];
}
}
cout<<f[N-1][M-1];
}
#include < string .h >
const int N = 8 ;
const int M = 9 ;
const int a[N][M] = ... {
...{9,3,0,8,9,10,5,8,9},
...{6,8,-5,10,0,-5,6,9,3},
...{8,6,1,8,5,4,0,2,-4},
...{9,9,-6,4,-6,7,4,3},
...{-1,7,1,8,2,7,2,10,7},
...{6,-3,-3,7,1,8,9,0},
...{0,7,0,2,-6,10,8,-8,5},
...{3,10,8,8,9,2,9,6,4},
} ;
int f[N][M];
void main()
... {
int i , j;
int tmp =0;
memset(f,0,sizeof(f));
for(i = 0 ; i < N ; ++i)
...{
tmp +=a[i][0];
f[i][0] = tmp;
}
tmp = 0;
for( j = 0 ; j < M ; ++j)
...{
tmp += a[0][j];
f[0][j] = tmp;
}
for( i = 1; i <N ; ++i)
for( j =1 ; j < M ; ++j)
...{
if(f[i][j-1] > f[i-1][j] )
...{
f[i][j] = f[i-1][j] + a[i][j];
}
else
...{
f[i][j] = f[i][j-1] + a[i][j];
}
}
cout<<f[N-1][M-1];
}