您的位置:首页 > 其它

凸多边形最优三角剖分

2013-12-21 17:18 225 查看
和矩阵连乘类似。。。

#include<iostream>
#include<string.h>
using namespace std;
#define N 6
#define INF 99999999
int m

,s

;

int weight[][6] = {{0,2,2,3,1,4},{2,0,1,5,2,3},{2,1,0,2,1,4},{3,5,2,0,6,2},
{1,2,1,6,0,1},{4,3,4,2,1,0}};

int get_weight(const int a, const int b, const int c)
{
return weight[a][b] + weight[b][c] + weight[c][a];
}

void back_track(int a, int b)
{
if (a == b) return;
back_track(a,s[a][b]);
back_track(s[a][b]+1,b); //记得这是要加一
cout<<"最优三角:V"<<a-1<<" V"<<s[a][b]<<" V"<<b<<endl;
}
int main()
{

memset(m,0,sizeof(m));
memset(s,0,sizeof(s));

int i,j,k,l;

for(l=2;l<N;++l)
{
for(i=1;i<=N-l+1;++i)
{
j=i+l-1;
m[i][j]=INF;
for(k=i;k<=j-1;++k)
{
int q=m[i][k]+m[k+1][j]+get_weight(i-1,k,j);
if(q<m[i][j])
{
m[i][j]=q;
s[i][j]=k;
}
}
}
}
cout<<m[1][N-1]<<endl;
cout<<endl;
back_track(1,5);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: