| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 17917 | Accepted: 9069 |
Description
Input
Output
Sample Input
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
Sample Output
3
这道题目比较基础,可以深搜也可以广搜
深搜快一点 36ms,广搜47ms。很好的练习题目。
把注释的去掉就是深搜了。
#include <stdio.h>
#include <queue>
using namespace std;
#define N 102
char map[N][N];
int n,m;
struct Node
{
int x,y;
};
int dis[10][3]={ {0,1},{0,-1},{-1,0},{1,0},{-1,-1},{-1,1},{1,-1},{1,1} };
void search(int a,int b)
{
/*map[a][b]=‘.‘;
for(int i=0;i<8;i++)
{
int tmpx=a+dis[i][0];
int tmpy=b+dis[i][1];
if(tmpx>0 && tmpx<=n && tmpy>0 && tmpy<=m && map[tmpx][tmpy]==‘W‘ ){
//map[tmpx][tmpy]=‘.‘;
search(tmpx,tmpy);
}
}*/
Node tmp,be;
be.x=a,be.y=b;
queue<Node> v;
v.push(be);
map[a][b]=‘.‘;
while(!v.empty())
{
be=v.front();
v.pop();
for(int i=0;i<8;i++)
{
tmp.x=be.x+dis[i][0];
tmp.y=be.y+dis[i][1];
if(tmp.x>0 && tmp.x<=n && tmp.y>0 && tmp.y<=m && map[tmp.x][tmp.y]==‘W‘ )
{
v.push(tmp);
map[tmp.x][tmp.y]=‘.‘;
}
}
}
}
int main()
{
int i,j,count;
while(~scanf("%d %d",&n,&m))
{
getchar();
count=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%c",&map[i][j]);} ///缺了括号,害死人啊
getchar();}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(map[i][j]==‘W‘)
{
//printf("%d %d\n",i,j);
search(i,j);count++;
}
printf("%d\n",count);
}
return 0;
}
深搜递归写法
#include <stdio.h> #include <queue> using namespace std; #define N 102 char map[N][N]; int n,m; void search(int i,int j) { if(map[i][j-1]==‘W‘) { map[i][j-1]=‘.‘; search(i,j-1); } if(map[i][j+1]==‘W‘) { map[i][j+1]=‘.‘; search(i,j+1); } if(map[i-1][j]==‘W‘) { map[i-1][j]=‘.‘; search(i-1,j); } if(map[i+1][j]==‘W‘) { map[i+1][j]=‘.‘; search(i+1,j); } if(map[i-1][j-1]==‘W‘) { map[i-1][j-1]=‘.‘; search(i-1,j-1); } if(map[i-1][j+1]==‘W‘) { map[i-1][j+1]=‘.‘; search(i-1,j+1); } if(map[i+1][j-1]==‘W‘) { map[i+1][j-1]=‘.‘; search(i+1,j-1); } if(map[i+1][j+1]==‘W‘) { map[i+1][j+1]=‘.‘; search(i+1,j+1); } } int main() { int i,j,count; while(~scanf("%d %d",&n,&m)) { getchar(); count=0; for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ scanf("%c",&map[i][j]);} ///缺了括号,害死人啊 getchar();} for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(map[i][j]==‘W‘) { //printf("%d %d\n",i,j); search(i,j);count++; } printf("%d\n",count); } return 0; }
poj 2386(深搜或广搜),布布扣,bubuko.com
原文:http://blog.csdn.net/y990041769/article/details/20719975