rt,搜索加剪枝写法,WA on #10,#12,#13
#include <bits/stdc++.h>
using namespace std;
int n,cnt;
double x[16],y[16],dis[16][16],ans;
bool vis[16];
void dfs(int deep,int now,double sum)
{
cnt++;
if (cnt >= 10000000)
{
cout << ans;
exit(0);
}
if (deep > n)
{
ans = min(ans,sum);
return;
}
for (int i = 1;i <= n;i++)
{
if (!vis[i])
{
double t = sum + dis[now][i];
if (t >= ans)
continue;
vis[i] = 1;
dfs(deep + 1,i,t);
vis[i] = 0;
}
}
}
int main()
{
cin >> n;
ans = 1e9;
for (int i = 1;i <= n;i++)
cin >> x[i] >> y[i];
for (int i = 0;i <= n;i++)
for (int j = 0;j <= n;j++)
dis[i][j] = sqrt(((x[i] - x[j]) * (x[i] - x[j])) + ((y[i] - y[j]) * (y[i] - y[j])));
dfs(1,0,0);
printf("%.2f",ans);
return 0;
}
还是说这个题目无法用搜索得出正确答案?