HDU 1584(蜘蛛牌 DFS)

Posted taskr212

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1584(蜘蛛牌 DFS)相关的知识,希望对你有一定的参考价值。

题意是在蜘蛛纸牌的背景下求 10 个数的最小移动距离。

在数组中存储 10 个数字各自的位置,用深搜回溯的方法求解。

代码如下:

技术分享图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int ans,a[20];
 4 bool vis[20];
 5 void dfs(int num,int sum)
 6 {
 7     if(sum > ans) return;
 8     if(num == 9)
 9     {
10         ans = sum;
11         return;
12     }
13     for(int i = 1; i <= 10; ++i)
14     {
15         if(!vis[i])
16         {
17             vis[i] = 1;
18             for(int j = i+1; j <= 10; ++j)
19             {
20                 if(!vis[j])
21                 {
22                     dfs(num+1,sum+abs(a[i]-a[j]));
23                     break;
24                 }
25             }
26             vis[i] = 0;
27         }
28     }
29 }
30 int main()
31 {
32     int t,tmp;
33     scanf("%d",&t);
34     while(t--)
35     {
36         for(int i = 1; i <= 10; ++i)
37         {
38             scanf("%d",&tmp);
39             a[tmp] = i;
40         }
41         memset(vis,0,sizeof(vis));
42         ans = 1000000;
43         dfs(0,0);
44         printf("%d
",ans);
45     }
46     return 0;
47 }
View Code

向这些博客的作者表示感谢:

https://blog.csdn.net/flynn_curry/article/details/50775604

https://www.cnblogs.com/yanqi110/articles/4928285.html

以上是关于HDU 1584(蜘蛛牌 DFS)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1584 蜘蛛纸牌

蜘蛛牌 (DFS)

hdu1584

hdu 1584 蜘蛛纸牌

HDU 1584

蜘蛛牌------和 上一个 戒指 差不多