POJ 1753 Flip Game(状态压缩)

举报
Linux猿 发表于 2021/08/04 23:39:00 2021/08/04
【摘要】 题目链接~~> 做题感悟:开始没好好读题,认为单个棋子也可以翻,那样的话就不可能出现 Impossible 的情况了,这说明没好好读题,既然题目给出 Impossible 那一定会有用,先用 dfs 暴力做的,然后看到网上有人用状态压缩,唉,我怎么没想到呢!(应该反思一下,毕竟也是做过几个状态压缩题的人,竟然没想到。)只能说一句:状态压缩太神奇了! 解题思路:因为题...

题目链接~~>

做题感悟:开始没好好读题,认为单个棋子也可以翻,那样的话就不可能出现 Impossible 的情况了,这说明没好好读题,既然题目给出 Impossible 那一定会有用,先用 dfs 暴力做的,然后看到网上有人用状态压缩,唉,我怎么没想到呢!(应该反思一下,毕竟也是做过几个状态压缩题的人,竟然没想到。)只能说一句:状态压缩太神奇了!

解题思路:因为题目只有 16 个位,所以转化为二进制没问题(和HDU 翻纸牌差不多)。这样图就可以标记了。

代码:


  
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. using namespace std ;
  5. char s[6] ;
  6. bool vis[150005] ;
  7. int p[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072} ;
  8. struct zhang
  9. {
  10. int x,step ;
  11. } ;
  12. int search(int x,int temp) // 变化上下左右
  13. {
  14. if(x+4<16) // 下
  15. temp^=p[x+4] ;
  16. if(x-4>=0) // 上
  17. temp^=p[x-4] ;
  18. if(x%4>0) //右
  19. temp^=p[x-1] ;
  20. if(x%4<3) // 左
  21. temp^=p[x+1] ;
  22. return temp ;
  23. }
  24. int bfs(int sum)
  25. {
  26. int temp ;
  27. queue<zhang>q ;
  28. zhang curt,next ;
  29. memset(vis,false,sizeof(vis)) ;
  30. curt.x=sum ;
  31. curt.step=0 ;
  32. vis[sum]=true ;
  33. q.push(curt) ;
  34. while(!q.empty())
  35. {
  36. curt=q.front() ;
  37. if(!curt.x||curt.x==65535)
  38. return curt.step ;
  39. q.pop() ;
  40. for(int i=0 ;i<16 ;i++)
  41. {
  42. next.step=curt.step+1 ;
  43. temp=curt.x^p[i] ;
  44. temp=search(i,temp) ;
  45. if(vis[temp])
  46. continue ;
  47. next.x=temp ;
  48. vis[temp]=true ;
  49. q.push(next) ;
  50. }
  51. }
  52. return -1 ;
  53. }
  54. int main()
  55. {
  56. int i,j,sum=0 ;
  57. for(i=0 ;i<4 ;i++)
  58. {
  59. scanf("%s",s) ;
  60. for(j=0 ;j<4 ;j++)
  61. if(s[j]=='b') // 压缩图
  62. sum=sum^p[i*4+j] ;
  63. }
  64. int mx=bfs(sum) ;
  65. if(mx!=-1)
  66. printf("%d\n",mx) ;
  67. else printf("Impossible\n") ;
  68. }



 

 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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