1. 程式人生 > >SSL-ZYC 洛谷 P1433 吃乳酪

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; }