poj 2386 Lake Counting DFS基础题
2014-03-15 17:27
225 查看
刚开始做这道题的时候因为这道这是一道搜索题,就开始想往8个方向搜,但是不知道该怎么样搜,
然后仔细想了想,每个W 如果周围有其他W就在搜下一个W,就这样就可以搜一块
这道题昨晚就想好了思路,写好了代码,测试样列能过,但是每次提交都是错的,我一直就在纠结拿错了,然后今天早上又来纠结。。。
最后发现 把gets()换成scanf()就秒过了。。。。也不知道什么原因,讨论区也没人回答。。。。。
这道题的基本思路也就是用递归的方法DFS,每搜到一个W就搜他的四周,如果还有W就继续搜,这样一个w就可以确定一片
然后用个ans每搜一次 ++
这样就能得到结果
#include<stdio.h>
#include<string.h>
char hehe[110][110];
int n,m;
void dfs(int i,int j)
{
if(i>=0&&j>=0&&i<n&&j<m)
{
hehe[i][j]='.';
for(int k=-1;k<2;k++)
{
for(int l=-1;l<2;l++)
{
if(hehe[i+k][j+l]=='W')
dfs(i+k,j+l);
}
}
}
}
int main()
{
int ans=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",hehe[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(hehe[i][j]=='W')
{
ans++;
dfs(i,j);
}
}
}
printf("%d\n",ans);
}
然后仔细想了想,每个W 如果周围有其他W就在搜下一个W,就这样就可以搜一块
这道题昨晚就想好了思路,写好了代码,测试样列能过,但是每次提交都是错的,我一直就在纠结拿错了,然后今天早上又来纠结。。。
最后发现 把gets()换成scanf()就秒过了。。。。也不知道什么原因,讨论区也没人回答。。。。。
这道题的基本思路也就是用递归的方法DFS,每搜到一个W就搜他的四周,如果还有W就继续搜,这样一个w就可以确定一片
然后用个ans每搜一次 ++
这样就能得到结果
#include<stdio.h>
#include<string.h>
char hehe[110][110];
int n,m;
void dfs(int i,int j)
{
if(i>=0&&j>=0&&i<n&&j<m)
{
hehe[i][j]='.';
for(int k=-1;k<2;k++)
{
for(int l=-1;l<2;l++)
{
if(hehe[i+k][j+l]=='W')
dfs(i+k,j+l);
}
}
}
}
int main()
{
int ans=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",hehe[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(hehe[i][j]=='W')
{
ans++;
dfs(i,j);
}
}
}
printf("%d\n",ans);
}
相关文章推荐
- poj 2386(Lake Counting)DFS 水水,,潮水
- 基础DFS-Lake Counting
- 基础DFS-Lake Counting
- POJ2386 Lake Counting 【DFS】
- poj_2386_lake counting(DFS)
- HDU 1016:Prime Ring Problem(基础DFS)
- 【搜索】POJ-3050 基础DFS
- 【基础练习】【DFS】poj1129 Channel Allocation题解
- 数据结构基础(五)图以及DFS、BFS
- 基础数据结构算法_DFS and BFS
- HDU2181(基础dfs)
- Lake Counting(DFS)
- POJ-2386 Lake Counting (思维+简单dfs)
- lake counting---dfs(深度搜索算法)
- Red and Black(基础DFS)
- DFS:Lake Counting(POJ 2386)
- DFS基础 (HDU 1010、HDU 1016、HDU 1072)
- DFS基础题
- poj 3009(dfs基础题)
- 分布式文件系统(DFS)基础