⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 triangulation.cpp

📁 用C++实现最优三角剖分
💻 CPP
字号:
#include<iostream.h>
//using namespace std;
#include<math.h>
#include<fstream.h>
#include"make2db.h"
double **v,**cc;
int **kay;
double dist(int i,int j)
{
	double dx=v[j][0]-v[i][0];
	double dy=v[j][1]-v[i][1];
	return sqrt(dx*dx+dy*dy);
}
double w(int i,int j,int k)
{
	return(dist(i,j)+dist(j,k)+dist(i,k));
}
double triangulation(int i,int j)
{
	if(cc[i][j]>0) return cc[i][j];
	if(i==j) return 0;
	cc[i][j]=triangulation(i+1,j)+w(i-1,i,j);
	kay[i][j]=i;
	for(int l=i+1;l<j;l++)
	{
		double u=triangulation(i,l)+triangulation(l+1,j)+w(i-1,l,j);
		if(u<cc[i][j])
		{
			cc[i][j]=u;
			kay[i][j]=l;
		}
	}
	return cc[i][j];
}
void Traceback(int i,int j)
{
	if(i==j) return;
	if(kay[i][j]==i) Traceback(i+1,j);
	else
	{
		Traceback(i,kay[i][j]);
		Traceback(kay[i][j]+1,j);
	}
	cout<<"v"<<i-1<<"v"<<kay[i][j]<<"v"<<j<<ends<<","<<ends;
}

void main(void)
{
	int i,j;
	int n;
	ifstream fin("data.txt");
	fin>>n;
	Make2DArray(cc,n,n);
	Make2DArray(kay,n,n);
	Make2DArray(v,n,2);
	for(i=0;i<n;i++)
		fin>>v[i][0]>>v[i][1];
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			cc[i][j]=0;
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			kay[i][j]=0;
		triangulation(1,n-1);
		cout<<"最优划分的费用是:"<<cc[1][n-1]<<endl;
		Traceback(1,n-1);
		cout<<endl;
		remove2DArray(cc,n);
		remove2DArray(kay,n);
		remove2DArray(v,n);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -