HDU 1584 蜘蛛牌

HDU 1584 蜘蛛牌(dfs)

在这里插入图片描述
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1584

因为蜘蛛牌是小的牌在大的牌上面,所以可以从小的牌开始找,10张牌9次排序一定可以排完,当前步数大于等于已经找到的最短步数也没有必要。
每一次找到没有排好的牌,找到他改排到的位置,因为只有一种能排的方法,所以找到后要退出当前循环,不然可能会出错

#include<bits/stdc++.h>
using namespace std;
int num[15],vis[15],minn;
inline void dfs(int v,int step){
	if(step>=minn)return;
	if(v==9){
		minn=step;
		return;
	}
	for(int i=1;i<=10;i++){
		if(vis[i]==0){
			vis[i]=1;
			for(int j=i+1;j<=10;j++){
				if(vis[j]==0){
					dfs(v+1,step+abs(num[i]-num[j]));
					break;
				}
			}
			vis[i]=0;
		}
	}
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		for(int i=0;i<=9;i++){
			int ans;
			scanf("%d",&ans);
			num[ans]=i;
			vis[i]=0;
		}
		minn=100000;
		dfs(0,0);
		printf("%d\n",minn);
	}
	return 0;
}
发布了35 篇原创文章 · 获赞 3 · 访问量 901

猜你喜欢

转载自blog.csdn.net/weixin_43823753/article/details/104479694