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;
}
#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
- HDU1045
- hdu1045
- hdu1045
- hdu1045
- hdu1045
- hdu1045
- hdu1045
- hdu1045
- HDU1045
- hdu1045
- hdu1045
- hdu1045 (DFS)
- HDU1045 DFS
- hdu1045--搜索
- hdu1045【dfs】
- 贪心之hdu1045
- DFS之hdu1045
- hdu1045 二分匹配
- Android manifest文件中的标签详细介绍
- Kalman
- 基于JSR-WS的认证
- Leetcode Database - 我的汇总
- 单例模式
- hdu1045
- linux 下安装、使用 redis
- 1091. Acute Stroke (30)
- 事件与委托的关系
- Spark使用实例
- java中ThreadLocal类的使用
- JAVA泛型详解
- EventBus详解
- App Crash 解决办法