您的位置:首页 > 其它

sgu——344(宽搜)

2012-08-20 13:26 274 查看
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=344

                //具有反复搜索性

源代码:

#include<iostream>
using namespace std;
//short int flag[1005][1005];
char a[1005][1005];
int X[4]={1,0,0,-1};
int Y[4]={0,1,-1,0};
int m,n;
void bfs(int x,int y)
{
int k,t;
int xx,yy;
int dx,dy;
int count=0;
for(k=0;k<4;k++)
{
xx=x+X[k];
yy=y+Y[k];
if(xx<0||yy<0||xx>=m||yy>=n) continue;
if(a[xx][yy]=='X') count++;
if(count==2) break;

}
if(count==2)
{
a[x][y]='X';
for(k=0;k<4;k++)
{
dx=x+X[k];
dy=y+Y[k];
if(dx<0||dy<0||dx>=m||dy>=n) continue;
if(a[dx][dy]=='.') bfs(dx,dy);
}
}
//return ;
}
int main()
{

int i,j;
int num;
while(cin>>m>>n)
{
num=0;
for(i=0;i<m;i++)
cin>>a[i];

for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(a[i][j]!='X') bfs(i,j);
}
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(a[i][j]=='X') num++;
}
cout<<num<<endl;
}

} 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: