杭电 1045题 Fire Net

举报
Linux猿 发表于 2021/08/06 00:03:01 2021/08/06
【摘要】 题目链接~~> 简单深度搜索,第一次做一次AC,第二次换了一种方法就找不出错误了! search(x,y+1,t+1); s[x][y+1]='.';后面应该还有一个search(x,y+1,t);的调用; 代码(1): #include<stdio.h>int n,max=0;char s[5][5];void dfs(int x,int y,in...

题目链接~~>

简单深度搜索,第一次做一次AC,第二次换了一种方法就找不出错误了!

search(x,y+1,t+1); s[x][y+1]='.';后面应该还有一个search(x,y+1,t);的调用;

代码(1):


  
  1. #include<stdio.h>
  2. int n,max=0;
  3. char s[5][5];
  4. void dfs(int x,int y,int q)
  5. {
  6. void search(int x,int y,int q);
  7. int i,j;
  8. int f=0;
  9. for(i=x+1;i<n;i++)
  10. if(s[i][y]=='X')break;
  11. else if(s[i][y]=='Q'){f=1;break;}
  12. for(j=y+1;j<n;j++)
  13. if(s[x][j]=='X')break;
  14. else if(s[x][j]=='Q'){f=1;break;}
  15. for(i=x-1;i>=0;i--)
  16. if(s[i][y]=='X')break;
  17. else if(s[i][y]=='Q'){f=1;break;}
  18. for(j=y-1;j>=0;j--)
  19. if(s[x][j]=='X')break;
  20. else if(s[x][j]=='Q'){f=1;break;}
  21. if(f==0){s[x][y]='Q';q++;f=0;}
  22. if(q>max)max=q;
  23. search(x,y,q);
  24. s[x][y]='.';
  25. }
  26. void search(int x,int y,int q)
  27. {
  28. int i,j;
  29. if(y==n-1){x=x+1;y=-1;}
  30. for(i=x;i<n;i++)
  31. { if(i!=x)y=-1;
  32. for(j=y+1;j<n;j++)
  33. if(s[i][j]=='.')
  34. {
  35. dfs(i,j,q);
  36. }
  37. }
  38. }
  39. int main()
  40. {
  41. int i,j;
  42. while(scanf("%d",&n)!=EOF)
  43. {
  44. max=0;
  45. if(n==0)break;
  46. for(i=0;i<n;i++)
  47. scanf("%s",s[i]);
  48. for(i=0;i<n;i++)
  49. for(j=0;j<n;j++)
  50. if(s[i][j]=='.')
  51. {
  52. dfs(i,j,0);
  53. }
  54. printf("%d\n",max);
  55. }
  56. return 0;
  57. }


 

代码(2):


  
  1. #include<stdio.h>
  2. char s[5][5];
  3. int max,n;
  4. void search(int x,int y,int t)
  5. {
  6. int i,flag=0;
  7. if(t>max)
  8. max=t;
  9. if(y==n)
  10. {x++;y=0;}
  11. if(x==n)
  12. return ;
  13. if(s[x][y]=='X')flag=1;
  14. for(i=x+1;i<n;i++)
  15. if(s[i][y]=='A')
  16. {
  17. flag=1;
  18. break;
  19. }
  20. else if(s[i][y]=='X')
  21. break;
  22. for(i=x-1;i>=0;i--)
  23. if(s[i][y]=='A')
  24. {
  25. flag=1;
  26. break;
  27. }
  28. else if(s[i][y]=='X')
  29. break;
  30. for(i=y-1;i>=0;i--)
  31. if(s[x][i]=='A')
  32. {
  33. flag=1;
  34. break;
  35. }
  36. else if(s[x][i]=='X')
  37. break;
  38. for(i=y+1;i<n;i++)
  39. if(s[x][i]=='A')
  40. {
  41. flag=1;
  42. break;
  43. }
  44. else if(s[x][i]=='X')
  45. break;
  46. if(flag==0)
  47. {
  48. s[x][y]='A';
  49. // printf("%d\n",t+1);
  50. search(x,y+1,t+1);
  51. s[x][y]='.';
  52. search(x,y+1,t);
  53. }
  54. else
  55. search(x,y+1,t);
  56. }
  57. int main()
  58. {
  59. int i,j;
  60. while(scanf("%d",&n)!=EOF)
  61. {
  62. if(n==0)break;
  63. max=0;
  64. for(i=0;i<n;i++)
  65. scanf("%s",s[i]);
  66. for(i=0;i<n;i++)
  67. for(j=0;j<n;j++)
  68. if(s[i][j]=='.')
  69. {
  70. search(i,j,0);
  71. }
  72. printf("%d\n",max);
  73. }
  74. return 0;
  75. }


 

优代码链接~>

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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