杭电 1045题 Fire Net
【摘要】 题目链接~~>
简单深度搜索,第一次做一次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)