MATRIX_CHAIN

来源:互联网 发布:slam算法工作原理 编辑:程序博客网 时间:2024/05/29 10:45
//这是按照算法导论给出解法写出的算法#include<iostream>#include<fstream>#include<cstdlib>using namespace std;ifstream fin("C:\\data17.in");char ID[100];int length[100],width[100];int n;int multinum[100][100];int s[100][100];#define MAXNUM 65535void Init(){char name;int len,wid;n=0;while(fin>>name>>len>>wid){ID[n]=name;length[n]=len;width[n++]=wid;}memset(multinum,0,sizeof(multinum));memset(s,0,sizeof(s));}void MATRIX_CHAIN_ORDER(){for(int i=0;i<n;++i)multinum[i][i]=0;for(int l=2;l<=n;++l){for(int i=0;i<n-l+1;++i){int j=i+l-1;multinum[i][j]=MAXNUM;int p;for(int k=i;k<j;++k){p=multinum[i][k]+multinum[k+1][j]+length[i]*width[k]*width[j];if(p<multinum[i][j]){multinum[i][j]=p;s[i][j]=k;}}}}}void PRINT_OPTIMAL_PARENS(int i,int j){if(i==j)cout<<ID[i];else{cout<<"(";PRINT_OPTIMAL_PARENS(i,s[i][j]);PRINT_OPTIMAL_PARENS(s[i][j]+1,j);cout<<")";}}int main(){Init();MATRIX_CHAIN_ORDER();PRINT_OPTIMAL_PARENS(0,n-1);system("pause");return 0;}

0 0
原创粉丝点击