深度优先搜索初尝试-DFS-LakeCounting POJ No.2386

来源:互联网 发布:php 下载为电子文档 编辑:程序博客网 时间:2024/05/17 04:24

DFS入门的一道经典题目:LakeCounting
用栈或队列来实现:

#include<cstdio>#include<stdlib.h>#include<iostream>#include<stack>using namespace std;int n,m;int pla[10][3]={{1,0},{1,1},{1,-1},{-1,-1},{-1,0},{-1,1},{0,-1},{0,1}};//对坐标进行移动的向量struct place{    int x,y;};//用结构体表示坐标char a[105][105];//核心部分DFSvoid DFS(int i,int j){    place begin,between;    stack<place>s;//stack的类型是坐标place    begin.x=i;    begin.y=j;//从(i,j)开始搜索        s.push(begin);//存入s        while(!s.empty())//为空搜索结束    {        begin=s.top();//提出栈顶进行搜索        s.pop();        for(i=0;i<8;i++)        {            between.x=begin.x+pla[i][0];            between.y=begin.y+pla[i][1];//加上坐标                         if(between.x>=0 && between.x<=n && between.y>=0 && between.y<=m && a[between.x][between.y]=='W')//在草地的范围内且是水            {                s.push(between);//入栈                a[between.x][between.y]='.';//改成‘.’防止重复判断             }        }            }    }int main(){    int i,j,k,t=0,sum=0;        scanf("%d%d",&n,&m);    getchar();         for(i=1;i<=n;i++)    {        for(j=1;j<=m;j++)        {            scanf("%c",&a[i][j]);        }                getchar();    }        for(i=1;i<=n;i++)    {        for(j=1;j<=m;j++)        {            if(a[i][j]=='W')            {                DFS(i,j);                sum++;//调用几次DFS即是水潭的个数            }        }    }        printf("%d\n",sum);        return 0;}

用栈来实现深度优先搜索。
大概的思路我用伪代码来解释:

伪代码:void DFS(传入刚开始坐标){       stack<坐标>s;       坐标begin,between.       begin存刚刚开始的坐标;       begin入栈;       while(s不为空)//s为空时停止搜索       {             坐标begin=栈顶坐标;             栈顶坐标出栈,开始搜索。             for(遍历八个搜索向量)             {                   begin+搜索向量;                   if(此时搜索到了水坑)                   {                          begin+搜索向量入栈(即此时搜索到的坐标);                          被搜索到的这个坐标标记为土地;                    }              }        }}

2016/3/10

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑识别不出u盘怎么办 u盘电脑读不出来怎么办 u盘突然无法识别怎么办 u盘电脑无法识别怎么办 系统无法识别u盘怎么办 手机u盘无法识别怎么办 u盘无法被识别怎么办 电脑不能读取u盘怎么办 电脑装系统卡了怎么办 怀孕三个月胚胎停育怎么办 被蟑螂咬了怎么办图片 有家人进了传销怎么办 有亲人进了传销怎么办 误入传销违法了怎么办 tt游戏账号忘了怎么办 被臭蚊子咬了怎么办 狗狗鼻子掉皮了怎么办 火碱弄到皮肤上怎么办 蓝斑马鱼怀孕后怎么办 汽油喝到肚子里怎么办 加了不好的汽油怎么办 不小心喝了汽油怎么办 如果误喝了汽油怎么办 小孩误喝了汽油怎么办 欠债活不下去了怎么办 待产住院住早了怎么办 狗狗一天吃一顿怎么办 四个月宝宝消化不好怎么办 内火旺盛长痘怎么办 我有恋爱恐惧症怎么办 白鹤芋叶子蔫了怎么办 白掌叶子蔫了怎么办 鱼塘的鱼不吃食怎么办 新买的鱼不吃食怎么办 养的鱼不吃食怎么办 罗汉掉鳞还是洞怎么办 刚买的鱼不吃食怎么办 锦鲤鱼掉鱼鳞片怎么办 锦鲤鱼身上烂了怎么办 鱼掉了一片鳞是怎么办 地图鱼身上烂了怎么办