您的位置:首页 > 其它

HDU 1584 蜘蛛牌

2013-10-08 09:42 267 查看
题目链接~~>

                这题其实很简单,开始做题时很盲目,上来就用广搜(可能是广搜用习惯的缘故),果断超时

,后来仔细想了一下,很明显用深搜嘛 !深搜写了一下wa,找了好久才找出来原来是少标记了一个。。

代码:

#include<stdio.h>
#include<stdlib.h>
int x[12],y[12] ;
int min ;
int search()//判断是否结束
{
for(int i=0;i<10;i++)
if(x[i]==10&&y[i]==1)
return 1 ;
return 0 ;
}
void dfs(int bu)
{
int i,j,t1,t2,t3  ;
if(search())
{
if(bu<min)//不断与最优值比较
min=bu ;
return  ;
}
for(i=0;i<10;i++)
{
if(x[i]!=10&&x[i]!=-5)
{
for(j=0;j<10;j++)
if(x[i]+1==y[j])
{
t1=y[j] ;
y[j]=y[i] ;
t2=x[i] ;
x[i]=-5 ;
t3=y[i] ;
y[i]=-5 ;
if(bu+abs(i-j)<min)//剪枝当大于最优解时没有继续向下搜索的必要。
dfs(bu+abs(i-j)) ;
y[j]=t1 ;
x[i]=t2 ;
y[i]=t3 ;
break ;
}
}
}
}
int main()
{
int T ;
scanf("%d",&T) ;
while(T--)
{
for(int i=0;i<10;i++)
{
scanf("%d",&x[i]) ;
y[i]=x[i] ;
}
min=9999999 ;
dfs(0) ;
printf("%d\n",min) ;
}
return 0 ;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: