杭电 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):


      #include<stdio.h>
      int n,max=0;
      char s[5][5];
      void dfs(int x,int y,int q)
      {
      void search(int x,int y,int q);
      int i,j;
      int f=0;
      for(i=x+1;i<n;i++)
      if(s[i][y]=='X')break;
      else if(s[i][y]=='Q'){f=1;break;}
      for(j=y+1;j<n;j++)
      if(s[x][j]=='X')break;
      else if(s[x][j]=='Q'){f=1;break;}
      for(i=x-1;i>=0;i--)
      if(s[i][y]=='X')break;
      else if(s[i][y]=='Q'){f=1;break;}
      for(j=y-1;j>=0;j--)
      if(s[x][j]=='X')break;
      else if(s[x][j]=='Q'){f=1;break;}
      if(f==0){s[x][y]='Q';q++;f=0;}
      if(q>max)max=q;
       search(x,y,q);
       s[x][y]='.';
      }
      void search(int x,int y,int q)
      {
      int i,j;
      if(y==n-1){x=x+1;y=-1;}
      for(i=x;i<n;i++)
       { if(i!=x)y=-1;
      for(j=y+1;j<n;j++)
      if(s[i][j]=='.')
       {
       dfs(i,j,q);
       }
       }
      }
      int main()
      {
      int i,j;
      while(scanf("%d",&n)!=EOF)
       {
       max=0;
      if(n==0)break;
      for(i=0;i<n;i++)
      scanf("%s",s[i]);
      for(i=0;i<n;i++)
      for(j=0;j<n;j++)
      if(s[i][j]=='.')
       {
       dfs(i,j,0);
       }
      printf("%d\n",max);
       }
      return 0;
      }
  
 


 

代码(2):


      #include<stdio.h>
      char s[5][5];
      int max,n;
      void search(int x,int y,int t)
      {
      int i,flag=0;
      if(t>max)
       max=t;
      if(y==n)
       {x++;y=0;}
      if(x==n)
      return ;
      if(s[x][y]=='X')flag=1;
      for(i=x+1;i<n;i++)
      if(s[i][y]=='A')
       {
       flag=1;
      break;
       }
      else if(s[i][y]=='X')
      break;
      for(i=x-1;i>=0;i--)
      if(s[i][y]=='A')
       {
       flag=1;
      break;
       }
      else if(s[i][y]=='X')
      break;
        for(i=y-1;i>=0;i--)
      if(s[x][i]=='A')
       {
       flag=1;
      break;
       }
      else if(s[x][i]=='X')
      break;
      for(i=y+1;i<n;i++)
      if(s[x][i]=='A')
       {
       flag=1;
      break;
       }
      else if(s[x][i]=='X')
      break;
      if(flag==0)
       {
       s[x][y]='A';
      // printf("%d\n",t+1);
       search(x,y+1,t+1);
       s[x][y]='.';
       search(x,y+1,t);
       }
        else
       search(x,y+1,t);
      }
      int main()
      {
      int i,j;
      while(scanf("%d",&n)!=EOF)
       {
      if(n==0)break;
       max=0;
      for(i=0;i<n;i++)
      scanf("%s",s[i]);
      for(i=0;i<n;i++)
      for(j=0;j<n;j++)
      if(s[i][j]=='.')
       {
       search(i,j,0);
       }
      printf("%d\n",max);
       }
      return 0;
      }
  
 


 

优代码链接~>

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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