您的位置:首页 > 其它

HDU 1045 - Fire Net

2016-05-02 01:37 323 查看
水水的dfs

又写出无脑的判断了..

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char map[5][5];
int n,ans;
int vis[5][5];
void dfs(int x,int cnt)
{
if(x==n){
if(ans<cnt) ans=cnt;
return ;
}
for(int i=0;i<n;++i)
{
if(!vis[x][i]&&map[x][i]=='.')
{
int j;
for(j=x;j>=0;--j){
if(map[j][i]=='X') break;
++vis[j][i];
}
for(j=x+1;j<n;++j){
if(map[j][i]=='X') break;
++vis[j][i];
}
for(j=i-1;j>=0;--j){
if(map[x][j]=='X') break;
++vis[x][j];
}
for(j=i+1;j<n;++j){
if(map[x][j]=='X') break;
++vis[x][j];
}
dfs(x,cnt+1);
for(j=x;j>=0;--j){
if(map[j][i]=='X') break;
--vis[j][i];
}
for(j=x+1;j<n;++j){
if(map[j][i]=='X') break;
--vis[j][i];
}
for(j=i-1;j>=0;--j){
if(map[x][j]=='X') break;
--vis[x][j];
}
for(j=i+1;j<n;++j){
if(map[x][j]=='X') break;
--vis[x][j];
}
}
}
dfs(x+1,cnt);
}
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=0;i<n;i++) scanf("%s",map[i]);
memset(vis,0,sizeof(vis));
ans=0;
dfs(0,0);
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: