hdu1045

来源:互联网 发布:mac上刀剑乱舞 编辑:程序博客网 时间:2024/06/10 15:10
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<ctime>
using namespace std;
int ans;
queue<int> q;
bool vis[5][5];
char map[5][5];
char blo[5][5];
int n;
int mov[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
void bfs(int x,int y)
{
memset(vis,false,sizeof(vis));
memset(blo,0,sizeof(blo));
int count=0;
while(!q.empty())q.pop();
int u=x*n+y;
q.push(u);
vis[x][y]=true;
blo[x][y]='A';
count++;
//printf("map[%d][%d]=%c\n",x,y,map[x][y]);
while(!q.empty())
{
int m=q.front();
q.pop();
int xx=m/n;
int yy=m%n;
for(int i=0;i<4;i++)
{
int x1=xx+mov[i][1];
int y1=yy+mov[i][0];

if(vis[x1][y1]) continue;
if(x1<0||x1>n-1||y1<0||y1>n-1) continue;
if(map[x1][y1]=='X') 
{
vis[x1][y1]=true;
q.push(x1*n+y1);
continue;
}
bool flag=true;


for(int i1=x1-1;i1>=0;i1--)
{

if(map[i1][y1]=='X') break;
if(blo[i1][y1]=='A') 
{
flag=false;
break;
}
}
for(int i2=x1+1;i2<=n-1;i2++)
{
if(map[i2][y1]=='X') break;
if(blo[i2][y1]=='A')
{
flag=false;
break;
}
}
for(int i3=y1-1;i3>=0;i3--)
{
if(map[x1][i3]=='X') break;
if(blo[x1][i3]=='A')
{
flag=false;
break;
}
}
for(int i4=y1+1;i4<=n-1;i4++)
{
if(map[x1][i4]=='X') break;
if(blo[x1][i4]=='A')
{
flag=false;
break;
}
}
vis[x1][y1]=true;
q.push(x1*n+y1);
if(flag)
{

blo[x1][y1]='A';
count++;
// cout<<"count="<<count<<endl;

}


}
if(count>ans) ans=count;
}

}
int main()
{
int i;
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
/*freopen("in.txt","w",stdout);*/
int Icase=0;
while(cin>>n&&n>0)
{
ans=0;
for(i=0;i<n;i++) scanf("%s",map[i]);
for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(map[i][j]=='.') 
{
bfs(i,j);
}
}
}
cout<<ans<<endl;


}
return 0;
}
0 0
原创粉丝点击