您的位置:首页 > 其它

poj2386,广搜,深搜

2015-12-28 21:01 260 查看
poj2386是一道非常适合练习搜索的题目,下面广搜和深搜的代码如下:

广搜:

#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
int xx[8][2] = {{0,1},{0,-1},{-1,0},{1,0},{1,1},{1,-1},{-1,-1},{-1,1}};
char s[105][105];
int n,m;
struct sa
{
int x,y;
} t,a;
void bfs(int x,int y)
{
queue<sa>q;
s[x][y]='.';
t.x=x;
t.y=y;
q.push(t);
while(!q.empty())
{
t=q.front();
q.pop();
for(int i=0; i<8; i++)
{
int x1=t.x+xx[i][0];
int y1=t.y+xx[i][1];
if(x1>=0&&x1<n&&y1>=0&&y1<m&&s[x1][y1]=='W')
{
s[x1][y1]='.';
a.x=x1;
a.y=y1;
q.push(a);
}
}
}
}
int main()
{
while(cin>>n>>m)
{
int sum=0;
memset(s,0,sizeof(s));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin>>s[i][j];
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
if(s[i][j]=='W')
{
bfs(i,j);
sum++;
}
}
cout<<sum<<endl;

}
return 0;
}


深搜

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char s[105][105];
int n,m;
void dfs(int x,int y)
{
s[x][y]='.';
for(int dx=-1; dx<=1; dx++)
for(int dy=-1; dy<=1; dy++)
{
int nx=dx+x;
int ny=dy+y;
if(nx>=0&&nx<n&&ny>=0&&ny<m&&s[nx][ny]=='W')
{
dfs(nx,ny);
}
}
}
int main()
{
while(cin>>n>>m)
{
memset(s,0,sizeof(s));
int sum=0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
//scanf("%c",&s[i][j]);
cin>>s[i][j];
}
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
if(s[i][j]=='W')
{
dfs(i,j);
sum++;
}
}
cout<<sum<<endl;

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