#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int s[10][10];
int maxs,n;
void dfs(int x,int y,int m) //根据是否建造攻击塔来深搜
{
int i,j,g;
if(y==n+1)
{
if(maxs<m) maxs=m;
return;
}
if(s[x][y]==0)
{
g=0;
for(i=1;i<x;i++)
g+=s[i][y];
if(g>0)
{
dfs(x%n+1,y+x/n,m);
return ;
}
g=0;
for(i=x+1;i<=n;i++)
g+=s[i][y];
if(g>0)
{
dfs(x%n+1,y+x/n,m);
return ;
}
g=0;
for(j=1;j<y;j++)
g+=s[x][j];
if(g>0)
{
dfs(x%n+1,y+x/n,m);
return ;
}
g=0;
for(j=y+1;j<=n;j++)
g+=s[x][j];
if(g>0)
{
dfs(x%n+1,y+x/n,m);
return ;
}
s[x][y]=1;
dfs(x%n+1,y+x/n,m+1);
s[x][y]=0;
dfs(x%n+1,y+x/n,m);
}
else dfs(x%n+1,y+x/n,m);
}
void bfs()
{
}
int main()
{
int i,j;
char s1[10][10];
while(scanf("%d",&n)>0,n)
{
getchar();
for(i=1;i<=n;i++)
gets(s1[i]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(s1[i][j-1]=='.') s[i][j]=0;
else s[i][j]=-1;
}
maxs=0;
dfs(1,1,0);
printf("%d\n",maxs);
}
return 0;
}
以上是DFS代码
hdu1045 (DFS)
最新推荐文章于 2019-11-29 20:51:40 发布