在栅格中,每一格的数值为走过此地需要付出的代价,从左上角走到右下角,求最小代价的走法。
23 | 45 |
45 | 34 |
76 | 24 |
分析可知,可通过如下代码求解,其中,通过x,y控制行走,通过a,v表示代价。
核心代码如下(具体移动函数省略【作者太懒了】):
void mind(){
int x1, y1, x2, y2;
for(int i = 0; i <= n; i++)
for(int j = 0; j <= n; j++)
for(int q = 0; q <= n; q++)
for(int p = 0; p <= n; p++)
g[i][j][q][p];
g[1][1][1][1][1] = t[1][1];
for(a = 2; a = 2*n-1 a++){
for(x1 =1 ; x1<=a-1; x1++){
for(x2 =1 ; x2 <= a-1; x2++){
y1 = a - x1;
y2 = a - x2;
v = t[x1][y1][x2][y2];
//使用 turn();函数进行移动,在此不做表示
}
}
}
由上述分析可知,所用空间为循环所需空间n^4;时间复杂度为logn.