SSL-ZYC 洛谷 P1433 吃乳酪
阿新 • • 發佈:2019-02-01
題目大意:
房間裡放著n塊乳酪。一隻小老鼠要把它們都吃掉,問至少要跑多少距離?老鼠一開始在(0,0)點處。
思路:
明顯的DFS!
這道題的思路是十分清晰的:
1.讀入,順便用勾股定理求兩點之間的距離。
2.DFS,從(0,0)開始,搜尋每一個點,將最短答案記錄在minn裡。
EASY!
程式碼:
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
double a[101][101],x[101],y[101],minn;
int n,t[101 ];
void dfs(int x,int y,double k) //DFS
{
if (y==n) //已經把所有點走完
{
if (k<minn) minn=k; //記錄最短答案
return;
}
if (k>=minn) return; //剪枝
for (int i=1;i<=n+1;i++) //列舉一個點(加上(0,0)共有n+1個點)
if (t[i]==0) //沒有走過
{
t[i]=1;
dfs(i,y+1,k+a[x][i]);
t[i]=0 ;
}
}
int main()
{
scanf("%d",&n);
x[1]=0;
y[1]=0;
for (int i=2;i<=n+1;i++)
{
cin>>x[i]>>y[i];
for (int j=1;j<i;j++)
a[i][j]=a[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); //求距離
}
t[1]=1;
minn=2147483647 ;
dfs(1,0,0);
printf("%0.2lf\n",minn);
return 0;
}