題目描述
房間里放著n塊奶酪。一只小老鼠要把它們都吃掉,問至少要跑多少距離?老鼠一開始在(0,0)點處。
輸入輸出格式
輸入格式: 第一行一個數n (n<=15)
接下來每行2個實數,表示第i塊奶酪的坐標。
兩點之間的距離公式=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2))
輸出格式: 一個數,表示要跑的最少距離,保留2位小數。
輸入輸出樣例
輸入樣例#1: 4 1 1 1 -1 -1 1 -1 -1 輸出樣例#1: 7.41
思路:dfs+剪枝
#include <iostream>#include <cstdio>#include <cmath>using namespace std;int n;double ans = 0x7f7f7f7f;double x[20], y[20];bool vis[20];int dfs(int t, double tx, double ty, double sum){ if (t > n) { ans = min(sum, ans); return 0; } if (sum > ans) return 0; for (int i = 1; i <= n; i++) { if (vis[i] == false) { vis[i] = true; dfs(t+1, x[i], y[i], sum+sqrt((x[i]-tx)*(x[i]-tx)+(y[i]-ty)*(y[i]-ty))); vis[i] = false; } } return 0;}int main(){ cin >> n; for (int i = 1; i <= n; i++) cin >> x[i] >> y[i]; dfs(1,0,0,0);新聞熱點
疑難解答