1: // 为x和s分配内存,大小均为n 2: // c数组存储L矩阵每一列在Lx的起始位置 3: for k = 0 to n -1 do 4: Lp[k] = c[k]; 5: top = ereach(C, k, parent, s,c); //获取L矩阵第k行的非零结构 6: x[k] = 0 7: for p = Cp[k] to Cp[k + 1] do 8: if Ci[p] ≤ k then 9: x[Ci[p]] = Cx[p]; 10: end if 11: end for 12: // s[top...n-1] 为L矩阵第k行的非零结构 13: for top to n-1 do 14: i = s[top]; 15: p = c[i]++; 16: Li[p] = k; //在L矩阵的第i列存储Lki | 17: Lx[p] = x[i]; 18: x[i] = 0; //为第k+1行清除x 19: end for 20: //存储Lkk 21: p = c[k]++; 22: Li[p] = k; 23: Lx[p] = x[k]; 24: x[k] = 0; 25: end for 26: Lp[n] = c[n-1]; |
|