题目:吃奶酪

问题描述:


解题思路:

枚举每种吃奶酪顺序,并计算其距离,选择最小的距离即答案。v数组:记录顺序。

注意点:1. 每次用于min的s需要重置为0。

2. 实数包括小数,所以结构体内x,y为double类型。

3. 第一次从原点开始出发要特判,即dis(a0(原点),av\[i](第一个顺序点))


AC代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n;
struct Node{
	double x, y;  // 注意点2
}a[9];


double dis(Node a, Node b){
	return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

void slove(){
	cin >> n;
	a[0].x = 0, a[0].y = 0;
	for(int i = 1; i <= n; i++)
	{
		cin >> a[i].x >> a[i].y;
	}
	
	vector<int> v;
	for(int i = 1; i <= n; i++)
	{
		v.push_back(i);	
	}
	double sum = 1e18;
	do{
		double s = 0;  // 注意点1:因为s是计算每种顺序计的最小值,所以枚举每种顺序时需要重置 
		for(int i = 0; i < n; i++)
		{
			if(i == 0)s += dis(a[v[i]], a[0]);  // 注意点3
			if(i)s += dis(a[v[i]], a[v[i - 1]]);
		}
		
		sum = min(sum, s);
	}while(next_permutation(v.begin(), v.end()));
	
	cout << fixed << setprecision(2) << sum ;
}


int main()
{
 	slove();	
	return 0;
}

**知识点:**全排列的使用

相关推荐
GeekZHR12 小时前
C语言指针2:数组名、二级指针、指针数组,一次把“指针和数组“讲透
c语言·数据结构·算法·指针
h_a_o777oah12 小时前
【算法基础】卡特兰数:递推定义与折线对称公式推导及解题策略
c++·算法·acm·组合数学·卡特兰数·反射原理·动态规划dp
JAI科研12 小时前
Deepseek Agent Harness教程(二) | DeepSeek Harness 设计思路
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·vllm
还不秃顶的计科生13 小时前
具身智能论文学习10:π0: A Vision-Language-Action Flow Model for General Robot Control
人工智能·深度学习·算法·机器学习·语言模型·vla·vlm
happyprince13 小时前
02-具体观 — Cordis 算法与实现剖析
算法
烬羽13 小时前
求第 K 大,为什么反而要用最小堆?
javascript·数据结构·算法
没落之王13 小时前
易学使者郑氏正脉郑冰推演马航事件
大数据·人工智能·算法·机器学习·可用性测试
阿部多瑞 ABU14 小时前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战
后端·算法·ui·pdf·c#
郝学胜-神的一滴14 小时前
并查集深度入门:从玄学抽象到 QuickFind & QuickUnion 源码实战
数据结构·c++·python·程序人生·算法·软件开发
比奇堡裤头村14 小时前
统计学习方法——决策树
算法·决策树·学习方法