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

📄 双调旅行售货员问题.txt

📁 算法设计与分析源代码算法设计与分析源代码
💻 TXT
字号:
#include<iostream> 
#include<algorithm> 
#include<math.h> 
using namespace std; 
class point 
{ public: 
int x,y; 
}; 
int less(point &a,point &b) 
{ 
return a.x<b.x; 
} 
double sum[31][31],ind[31][31]; 
void main() 
{ 
int n,j; 
cin>>n; 
point *w=new point [n+1]; 
double t,*way=new double [n+1]; 

for(int i=1;i<=n;i++) 
cin>>w[i].x>>w[i].y; 
sort(w+1,w+n+1,less); 
for(i=1;i<=n;i++) 
{ 
for(j=i;j<=n;j++) 
if(j!=i) 
ind[i][j]=sqrt(pow(w[j].x-w[i].x,2)+pow(w[j].y-w[i].y,2)); 
else 
ind[i][j]=0; 

} 
sum[1][1]=0; 
for(i=2;i<=n;i++) 
{ sum[i-1][i]=ind[i-1][i]; 
sum[i][i]=0; 
} 
for(i=3;i<=n;i++) 
{  
for(j=1;j<=n-i+1;j++) 
sum[j][j+i-1]=sum[j][j+i-2]+ind[j+i-2][j+i-1]; 
} 


way[2]=ind[1][2]*2; 

way[1]=0; 
for(i=3;i<=n;i++) 
{ double min=10000000; 
for(j=1;j<=i-2;j++) 
{ 
  
 t=ind[j][i]+sum[j+1][i]+way[j+1]-ind[j][j+1]; 
 if(t<min) 
 min=t; 
} 
way[i]=min; 
} 
cout<<way[n]<<endl; 

} 

⌨️ 快捷键说明

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