最优三角
一个n个角的凸多边形,,用互不相交的弦将其分为一个个的三角形,每个三角形的权值都是由三角形的边和弦组成权值函数w,求解如何划分才能使所有的角上的权值和达到最小
算法:
1、 minWeightTriangulation();// 遍历得到最优值,记录到备忘录中(s[][]中记录最佳顶点位置,t[][]中记录最小权值)
2、 minWeig();//计算权值
3、 Traceback();//递归遍历得到最优三角的顶点
输入: 凸多边形各个顶点的位置:
B[0].position( 0, 4);
B[1].position(-4, 3);
B[2].position(-6, 0);
B[3].position(-3,-4);
B[4].position( 2,-3);
B[5].position( 5, 0);
B[6].position( 3, 3);
空备忘录s[][],t[][]
输出: 带有最优值的备忘录s[][],t[][];最优三角序列。
packag
e 最优三角;
class position {
int x;
int y;
public void position(int a,int b) {
this.x=a;
this.y=b;
}
};
public class minWeig {
public static double w(position a,position b,position c) {
double x,y,z,h;
x=Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
y=Math.sqrt((a.x-c.x)*(a.x-c.x