矩阵链乘法

来源:互联网 发布:浙大教务网络管理系统 编辑:程序博客网 时间:2024/05/26 05:51

动态规划之矩阵链乘法。。。

#include <iostream>using namespace std;int columns[] = {30, 35, 15, 5, 10, 20, 25};const int size = sizeof columns / sizeof *columns;int m[size][size];int s[size][size];void getChainOrder(int *columns, int size){if (columns == NULL || size <= 0)return;for (int i = 1; i <= size; i++)m[i][i] = 0;for (int l = 2; l <= size; l++){for (int i = 1; i <= size - l + 1; i++){int j = i + l - 1;m[i][j] = 65535;for (int k = i; k <= j; k++){int q = m[i][k] + m[k + 1][j] + columns[i - 1] * columns[k] * columns[j];if (q < m[i][j]){m[i][j] = q;s[i][j] = k;}}}}}void print(){for (int i = 1; i <= size - 1; i++){for (int j = 1; j <= size - 1; j++)cout << m[i][j] << '\t';cout << endl;}}void printResult(int i = 1, int j = size){if (i == j)cout << "A" << i;else{cout << "(";printResult(i, s[i][j]);printResult(s[i][j] + 1, j);cout << ")";}}void main(){cout << "size = " << size << endl;getChainOrder(columns, size);print();cout << "m[0][5] = " << m[1][6] << endl;printResult();}






原创粉丝点击