题目:吃奶酪

问题描述:


解题思路:

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

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

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

3. 第一次从原点开始出发要特判,即dis(a[0](原点),a[v[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;
}

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

相关推荐
罗湖老棍子14 小时前
团伙(group)(信息学奥赛一本通- P1385)
算法·图论·并查集
Ka1Yan14 小时前
[链表] - 代码随想录 160. 相交链表
算法·leetcode·链表
Ka1Yan14 小时前
[链表] - 代码随想录 206. 反转链表
数据结构·链表
学嵌入式的小杨同学14 小时前
C 语言实战:动态规划求解最长公共子串(连续),附完整实现与优化
数据结构·c++·算法·unity·游戏引擎·代理模式
rgeshfgreh14 小时前
顺序表实战:构建到销毁全解析
算法
十八岁讨厌编程14 小时前
【算法训练营Day32】图论专题
算法·深度优先·图论
小欣加油14 小时前
leetcode 174 地下城游戏
c++·算法·leetcode·职场和发展·动态规划
sali-tec15 小时前
C# 基于OpenCv的视觉工作流-章11-高斯滤波
图像处理·人工智能·opencv·算法·计算机视觉
良木生香15 小时前
【C语言进阶】文件操作的相关详解(1):
c语言·数据结构·c++
Ka1Yan15 小时前
[链表] - 代码随想录 203. 移除链表元素
数据结构·链表