xfstart07
Get busy living or get busy dying
floodfill
#include<iostream>
using namespace std;

int N;
int map[35][35];
const int d[4][2]={0,-1,-1,0,0,1,1,0};
long long ans;
void fill(int x,int y){
    map[x][y]
=-1;
    
for(int i=0;i<4;++i)
        
if(map[x+d[i][0]][y+d[i][1]]>0)
            fill(x
+d[i][0],y+d[i][1]);
        
else if(map[x+d[i][0]][y+d[i][1]]==0) ans++;
}
int main()
{
    scanf(
"%d",&N); getchar();
    memset(map,
0,sizeof(map));
    
char ch;
    
for(int i=1;i<=N;++i){
        
for(int j=1;j<=N;++j){
            ch
=getchar();
            
if(ch=='.') map[i][j]=1;
        }
        getchar();
    }
    ans
=0;
    map[
0][1]=map[1][0]=map[N][N+1]=map[N+1][N]=-1;
    fill(
1,1);
    
if(map[N][N]!=-1) fill(N,N);
    printf(
"%lld\n",ans*9);
    
return 0;
}



posted on 2009-05-29 15:12 xfstart07 阅读(250) 评论(0)  编辑 收藏 引用 所属分类: 代码库

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理