HDU 1518题 Square (DFS)

举报
Linux猿 发表于 2021/08/05 00:39:19 2021/08/05
【摘要】 题目链接~~>                    刚刚开始深入研究一下深搜,不料,其实这题也不难,只是没深入思考。。只需要一个小剪枝就行。 代码: #include<stdio...

题目链接~~>

                   刚刚开始深入研究一下深搜,不料快哭了,其实这题也不难,只是没深入思考。。只需要一个小剪枝就行。

代码:


  
  1. #include<stdio.h>
  2. int g[22] ;
  3. int n,mx,f ;
  4. void dfs(int sm,int q,int cnt)
  5. {
  6. int i,t ;
  7. if(f||q==3)//只需要找到3个边就行。
  8. {
  9. f=1 ;
  10. return ;
  11. }
  12. for(i=cnt;i<n;i++)//cnt很重要!!避免1-2-3和1-3-2等的重复。。。
  13. {
  14. if(g[i]&&g[i]+sm<mx)
  15. {
  16. t=g[i] ;
  17. g[i]=0 ;
  18. dfs(t+sm,q,i+1) ;
  19. g[i]=t ;
  20. }
  21. else if(g[i]&&g[i]+sm==mx)
  22. {
  23. sm=0 ;
  24. t=g[i] ;
  25. g[i]=0 ;
  26. dfs(0,q+1,0) ;//不要忘记标记g[i]=0 ;
  27. g[i]=t ;
  28. }
  29. }
  30. }
  31. int main()
  32. {
  33. int T,i ;
  34. scanf("%d",&T) ;
  35. while(T--)
  36. {
  37. scanf("%d",&n) ;
  38. int sum=0 ;
  39. for(i=0;i<n;i++)
  40. {
  41. scanf("%d",&g[i]) ;
  42. sum+=g[i] ;
  43. }
  44. if(sum%4==0)
  45. {
  46. mx=sum/4 ;f=0 ;
  47. dfs(0,0,0) ;
  48. if(f)
  49. printf("yes\n") ;
  50. else printf("no\n") ;
  51. }
  52. else printf("no\n") ;
  53. }
  54. return 0 ;
  55. }


 

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/13094915

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。