凸多边形最优三角剖分

来源:互联网 发布:小学生领结淘宝 编辑:程序博客网 时间:2024/05/01 10:13


和矩阵连乘类似。。。

#include<iostream>  #include<string.h>  using namespace std;  #define N 6  #define INF 99999999  int m[N][N],s[N][N]; 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);   }  


0 0