SSL-ZYC 洛谷 P1433 吃奶酪

题目大意:
房间里放着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;
} 

猜你喜欢

转载自blog.csdn.net/ssl_zyc/article/details/79837129