当前位置:   article > 正文

深度搜索算法3(c++)

深度搜索算法3(c++)

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int a[110][110];
  5. char b[110][110];
  6. int n,m;
  7. int si,sj,ei,ej;
  8. int di[] = {0,1,0,-1};
  9. int dj[] = {1,0,-1,0};
  10. void aaa(int,int,int);
  11. int main()
  12. {
  13. while(true)
  14. {
  15. cin>>n>>m;
  16. if(n==0&&m==0) break;
  17. for(int i = 0;i<n;i++)
  18. {
  19. for(int j = 0;j<m;j++)
  20. {
  21. cin>>b[i][j];
  22. if(b[i][j]!='#')
  23. {
  24. a[i][j] = 1000000;
  25. }
  26. else{
  27. a[i][j] = 0;
  28. }
  29. if(b[i][j]=='@')
  30. {
  31. si = i;
  32. sj = j;
  33. }
  34. else if(b[i][j]=='*')
  35. {
  36. ei = i;
  37. ej = j;
  38. }
  39. }
  40. }
  41. aaa(si,sj,0);
  42. if(a[ei][ej]<100000)
  43. {
  44. cout<<a[ei][ej]<<endl;
  45. }
  46. else{
  47. cout<<-1<<endl;
  48. }
  49. }
  50. return 0;
  51. }
  52. void aaa(int i,int j,int cnt)
  53. {
  54. a[i][j] = cnt;
  55. for(int qqq = 0;qqq<4;qqq++)
  56. {
  57. int ti = i+di[qqq];
  58. int tj = j+dj[qqq];
  59. if(ti>=0&&ti<n&&tj>=0&&tj<m&&a[ti][tj]>cnt+1&&b[ti][tj]!='#')
  60. {
  61. aaa(ti,tj,cnt+1);
  62. }
  63. }
  64. return;
  65. }

卫星照片

农夫约翰总是想要一个农场的地图,所以他拍摄了一张N行M列的卫星照片。 一部分的照片看起来像这样: 他认为每个联通块都是一个谷仓或一头奶牛。 农夫约翰认为一个联通块是谷仓,当且仅当它是一个完整的矩形,否则该联通块是一头奶牛。

在下面的照片中,有三个谷仓(大小分别为2x1,2x5和1x1)和两头奶牛。 计算他的卫星照片中谷仓和奶牛的数量。

. . . . . . . . . . . . . . . . . .
. . # # # # # . . . . . . . # # . .
. . # # # # # . . . . . . # # . . .
. . . . . . . . . . . . . . . . . .
# . . . . . . . # # # . . . . . # .
# . . . . . # # # # # . . . . . . .

输入

行1:两个空格分隔的整数:N和M

 行2..N + 1:行i + 1表示照片的行i包含M个字 符(且不含空格)。

输出

行1:照片中的谷仓数量。

行2:照片中的奶牛数量。

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int a[110][110];
  5. char b[110][110];
  6. int n,m;
  7. int si,sj,ei,ej;
  8. int di[] = {0,1,0,-1};
  9. int dj[] = {1,0,-1,0};
  10. int ck = 0,nn = 0;
  11. int cnt = 0;
  12. void aaa(int,int);
  13. int main()
  14. {
  15. cin>>n>>m;
  16. for(int i = 0;i<n;i++)
  17. {
  18. for(int j = 0;j<m;j++)
  19. {
  20. cin>>b[i][j];
  21. }
  22. }
  23. for(int i = 0;i<n;i++)
  24. {
  25. for(int j = 0;j<m;j++)
  26. {
  27. if(b[i][j]=='#')
  28. {
  29. si = i;
  30. ei = i;
  31. sj = j;
  32. ej = j;
  33. cnt = 0;
  34. aaa(i,j);
  35. if(cnt==(ei-si+1)*(ej-sj+1))
  36. {
  37. ck++;
  38. }
  39. else{
  40. nn++;
  41. }
  42. }
  43. }
  44. }
  45. cout<<ck<<endl<<nn;
  46. return 0;
  47. }
  48. void aaa(int i,int j)
  49. {
  50. b[i][j] = '.';
  51. cnt++;
  52. si = min(si,i);
  53. sj = min(sj,j);
  54. ei = max(ei,i);
  55. ej = max(ej,j);
  56. for(int qqq = 0;qqq<4;qqq++)
  57. {
  58. int ti = i+di[qqq];
  59. int tj = j+dj[qqq];
  60. if(ti>=0&&ti<n&&tj>=0&&tj<m&&b[ti][tj]=='#')
  61. {
  62. aaa(ti,tj);
  63. }
  64. }
  65. return;
  66. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/726487
推荐阅读
相关标签
  

闽ICP备14008679号