摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
Fox And Two Dots ★☆☆☆☆ 答案正确 100 2015-02-25 17:40:14 mn打反(23)

题意

找出n*m地图上能形成至少四个点不重回路的路线。

题解

dfs,找一个数组记录每个点的深度以保证至少四个点不重。

代码

510B.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string>
  4. #include<vector>
  5. #include<iomanip>
  6. #include<algorithm>
  7. #include<cstring>
  8. #include<cmath>
  9. #include<bitset>
  10. #include<set>
  11. #include<sstream>
  12. using namespace std;
  13. #define llu unsigned long long
  14. #define lld long long
  15. #define ci const lld&
  16. #define si(n) scanf("%lld",&n)
  17. #define f0(i,n) for(lld i=0;i!=n;++i)
  18. int track[60][60]={},sx[4]={1,0,-1,0},sy[4]={0,1,0,-1};
  19. lld n,m;
  20. string s[60]={};
  21. void dfs(ci x,ci y,ci deep,const char& c)
  22. {
  23. if(x<0||y<0||x>=n||y>=m)return;
  24. if(s[x][y]!=c)return;
  25. //cout<<x<<" "<<y<<" "<<deep<<endl;
  26. if(track[x][y]&&deep-track[x][y]>=4)
  27. {
  28. cout<<"Yes";
  29. exit(0);
  30. }
  31. if(track[x][y])return;
  32. track[x][y]=deep;
  33. f0(i,4)
  34. dfs(x+sx[i],y+sy[i],deep+1,c);
  35. }
  36. int main()
  37. {
  38. si(n);si(m);
  39. f0(i,n)cin>>s[i];
  40. f0(i,n)f0(j,m)//fixed:n->m//
  41. {
  42. memset(track,0,sizeof(track));
  43. dfs(i,j,1,s[i][j]);
  44. }
  45. cout<<"No";
  46. exit(0);
  47. }

著作权声明[编辑]

关于[编辑]