题目:吃奶酪

问题描述:


解题思路:

枚举每种吃奶酪顺序,并计算其距离,选择最小的距离即答案。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;
}

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

相关推荐
一个王同学7 分钟前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm
旖-旎1 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划
变量未定义~2 小时前
单调栈+倍增思想 皇家守卫【算法赛】、单调队列 附近最小
算法
QN1幻化引擎2 小时前
给 AI 做一次「意识体检」——基于 QN1 幻化引擎的灵鉴意识识别框架与 DalinX V5 实测
大数据·数据结构·人工智能·算法·架构
拂拉氏2 小时前
【知识讲解】 AVL树从基本成员的介绍到核心接口的实现(插入、判断、删除等等)
数据结构·算法·avl树
可靠的仙人掌3 小时前
SAC(Soft Actor-Critic)算法底座
开发语言·算法·php
c238563 小时前
《动态规划:从“傻傻穷举”到“过目不忘”的修仙之路》
c++·算法·动态规划
海石4 小时前
单调栈复健,顺便,牺牲一下吧,空间复杂度!一切献给AC
算法·leetcode
海石4 小时前
JS击败94%,Hard题想不到动态规划,那就用数组和栈试试
算法·leetcode
码少女5 小时前
数据结构——希尔排序
数据结构·排序算法