您的位置:首页 > 其它

HDU 1547 Bubble Shooter

2012-01-15 14:06 381 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1547

dfs

我的代码

#include <stdio.h>
#include <string.h>
const int N=210;
const int dx[6]={0,1,1,0,-1,-1};
const int dy[6]={2,1,-1,-2,-1,1};
char maze

;
int m,n,ans;
void dfs1(int x,int y,char c)
{
maze[x][y]=0; ans++;
int d,nx,ny;
for (d=0;d<6;d++)
{
if (y==1 && d==3) continue;
nx=x+dx[d]; ny=y+dy[d];
if (maze[nx][ny]==c) dfs1(nx,ny,c);
}

}
void dfs2(int x,int y)
{
maze[x][y]=0;
int d,nx,ny;
for (d=0;d<6;d++)
{
if (y==1 && d==3) continue;
nx=x+dx[d]; ny=y+dy[d];
if (maze[nx][ny]) dfs2(nx,ny);
}

}
int main()
{
int x,y,i,j;
while (~scanf("%d%d%d%d",&n,&m,&x,&y))
{
ans=0; m=m*2-1;
memset(maze,0,sizeof(maze));
for (i=1;i<=n;i++)
{
char s
;
scanf("%s",s);
if (i%2) for (j=0;s[j];j++) maze[i][j*2+1]=s[j];
else for (j=0;s[j];j++) maze[i][j*2+2]=s[j];
for (j=1;j<=m;j++) if (maze[i][j]=='E') maze[i][j]=0;
}
if (x%2) y=y*2-1; else y=y*2;
dfs1(x,y,maze[x][y]);
if (ans<3) ans=0;
else
{
for (i=1;i<=m;i++)
if (maze[1][i]) dfs2(1,i);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (maze[i][j]) ans++;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: