HDU 2579 Dating with girls(2)

举报
Linux猿 发表于 2021/08/04 23:17:18 2021/08/04
【摘要】 题目链接~~> 做题感悟:这题注意它好久了,只是一直没有好的想法,正好感觉无聊于是下定决心A掉它,于是AC,有时做题真的取决于你想不想去做的问题。本以为自己的想法很好,但是看到网上别人的代码,顿时感觉被打击了。唯一值得高兴的是我的时间比他的短。 解题思路:我的思路就不说了,有点麻烦。因为在 k 时间石头会消失,但是当你到达那一点是不一定刚好(有可能再走一下回头路再次...

题目链接~~>

做题感悟:这题注意它好久了,只是一直没有好的想法,正好感觉无聊于是下定决心A掉它,于是AC,有时做题真的取决于你想不想去做的问题。本以为自己的想法很好,但是看到网上别人的代码,顿时感觉被打击了。唯一值得高兴的是我的时间比他的短吐舌头

解题思路:我的思路就不说了,有点麻烦。因为在 k 时间石头会消失,但是当你到达那一点是不一定刚好(有可能再走一下回头路再次到这一点时石头就会消失),可以通过三维数组标记,第三维是时间模 k 的余数,这样就可以标记整个图。

代码:


  
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<queue>
  5. #include<algorithm>
  6. using namespace std ;
  7. int n,m,k ;
  8. bool vis[105][105][15] ;
  9. char s[105][105] ;
  10. int dx[4]={1,-1,0,0},dy[4]={0,0,-1,1} ;
  11. struct zhang
  12. {
  13. int x,y,step ;
  14. } ;
  15. bool search(int x,int y,int step) //判断是否可以走
  16. {
  17. if(x<0||y<0||x>=n||y>=m||vis[x][y][step%k])
  18. return false ;
  19. if(s[x][y]=='#'&&step%k!=0)
  20. return false ;
  21. return true ;
  22. }
  23. int bfs(int x,int y)
  24. {
  25. queue<zhang>q ;
  26. memset(vis,false,sizeof(vis)) ;
  27. zhang curt,next ;
  28. curt.x=x ;
  29. curt.y=y ;
  30. vis[x][y][0]=true ;
  31. curt.step=0 ;
  32. q.push(curt) ;
  33. while(!q.empty())
  34. {
  35. curt=q.front() ;
  36. q.pop() ;
  37. if(s[curt.x][curt.y]=='G')
  38. return curt.step ;
  39. for(int i=0 ;i<4 ;i++)
  40. {
  41. next.x=curt.x+dx[i] ;
  42. next.y=curt.y+dy[i] ;
  43. next.step=curt.step+1 ;
  44. if(search(next.x,next.y,next.step))
  45. {
  46. vis[next.x][next.y][next.step%k]=true ;
  47. q.push(next) ;
  48. }
  49. }
  50. }
  51. return -1 ;
  52. }
  53. int main()
  54. {
  55. int T,sx,sy ;
  56. scanf("%d",&T) ;
  57. while(T--)
  58. {
  59. scanf("%d%d%d",&n,&m,&k) ;
  60. for(int i=0 ; i<n ;i++)
  61. {
  62. scanf("%s",s[i]) ;
  63. for(int j=0 ;j<m ;j++)
  64. if(s[i][j]=='Y')
  65. {
  66. sx=i ;
  67. sy=j ;
  68. }
  69. }
  70. int mx=bfs(sx,sy) ;
  71. if(mx!=-1)
  72. printf("%d\n",mx) ;
  73. else printf("Please give me another chance!\n") ;
  74. }
  75. return 0 ;
  76. }

本人代码~>

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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