对“深度优先遍历”的理解

来源:互联网 发布:html json解析工具 编辑:程序博客网 时间:2024/06/05 17:07

深度优先遍历

1 连通图深度优先遍

1)      从图中的某一个顶点V出发,访问此顶点,然后从和V相连但是没有被访问过的顶点出发,深度先遍历图,直到将和V连通的所有顶点被访问完为止

2 非连通图深度优先遍历

1)      从图中的某一个顶点V出发,访问此顶点,然后从和V相连但是没有被访问过的顶点出发,深度先遍历图,直到将和V连通的所有顶点被访问完为止

2)      若此时图中还有顶点未被访问,则任选其中的一个顶点出发,重复1)的步骤,直到图中所有的顶点被访问完

3 深度优先搜索比喻:

    如果在家里找东西,有四个卧室,深度优先就是,将一个卧室彻彻底底的找一遍,然后再找另外的一个卧室,以此下去

4 代码解析

1)      邻接矩阵存储结构

typedefint Boolean;

Boolean visited[Max];                 //记录顶点是否被访问过

 

void DFS(MGraph G,inti)

{

int j;

visited[i] = TRUE;             //首先,将顶点标识为“已访问”

cout <<G.vexs[i] << endl;      //输出顶点信息也可以是其他的操作 比如比较

for(j = 0; j <G.numVertex; j++)

{

if(G.arc[i][j] == 1&& !visited[j])   //当顶点j 与 顶点i 有连通时,并且没有被访问

{

DFS(G,j);    //递归深度遍历顶点j的下一个连通并且没有被访问过的顶点

}

}

}

 

voidDFSTraverse(MGraph G)

{

int i;

for(i = 0; i <G.numVertex; i++)     //初始化visited数组,所有顶点都是未访问过的

{

visited[i]= FALSE;

}

for(i = 0; i <numVertex; i++)         //开始深度搜索图中所有的顶点

{

if(!visited[i])       //如果顶点没有被访问,则访问,否则不访问

{

DFS(G,i);       //将图的结构体指针、当前顶点下标传进去

}

}

}

2)      邻接表存储结构

void DFS(GrapgAglistG,int i)

{

int j;

EdgeNode *p;          //指向下一条边的指针

visited[i] = true;

cout <<G->adjust[i].data;

p =G->adjust[i].firstedge;      //给p赋值,顶点i 的下一条边

/*   因为邻接表中的所有边都是直接直接通过指针连接起来的,所有不需要用遍历的方式,而是判断当前顶点的下一条边是否存在

for(j = 0; j < G.numVertex; j++)

{

if(!visited[i]&& p==G->adjust[j].firstedge)

{

DFS(G,j);

}

}*/

//因为邻接表中的所有边都是直接直接通过指针连接起来的,所有不需要用遍历的方式,而是判断当前顶点的下一条边是否存在

while(p)

{

if(!visited[p->adjvex])

{

DFS(G,p->adjvex);

}

p = p->next;

}

}

 

voidDFSTraverse(GrapgAglist G)

{

int j;

for(j = 0; j <G.numVertex; j++)

{

visited[j] = false;

}

for(j = 0; j <G.numVertex; j++)

{

if(!visited[j])

{

DFS(G,j);

}

}

}

5 注意点:

1)      存储深度遍历信息的结构:

a)      visited[Max]数组,存储顶点是否被访问的信息,TRUE  FALSE

b)      G 图结构体指针,其中有图的边、顶点个数,邻接矩阵,边的信息

c)       i 深度遍历的起点

2)      判断是否遍历的条件:

a)      是否已经被访问过

b)      是否和当前顶点连通

3)      信息的变化:一旦确定可以访问,转到DFS函数中,要将顶点标记为已访问的

部分代码摘抄自《大话数据结构》

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生完孩子小腹大怎么办 生完孩子肚皮松怎么办 生过孩子肚子松怎么办 生完孩子肚皮痒怎么办 生完小孩肚子松弛怎么办 生了孩子肚子大怎么办 嫁到别的省户口怎么办 孕中期假性宫缩怎么办 频繁的假性宫缩怎么办 显卡风扇不转了怎么办 老是想不好的事怎么办 做人工受孕多囊怎么办 子宫内有囊肿该怎么办 子宫长了个囊肿怎么办 怀孕后不想要该怎么办 20多岁雌激素低怎么办 生完小孩后子宫下垂怎么办 取环之前同房了怎么办 做人流后又怀孕怎么办 仓鼠长了个肿瘤怎么办 过敏留下的黑印怎么办 脸上痘痘发炎了怎么办 脸上皮肤红痒怎么办啊 皮肤有一片红痒怎么办 脸过敏期间很干怎么办 怀孕了用了消糜栓怎么办 乳酸杆菌少或无怎么办 怀孕了白带有异味怎么办 怀孕清洁度iv度怎么办 怀孕了下面有异味怎么办 孕妇尿白细胞1是怎么办 药流期间喂奶了怎么办 20多岁卵巢早衰怎么办 3岁儿童肚子胀气怎么办 肚子又胀又痛怎么办 1岁宝宝肚子胀气怎么办 2岁宝宝肚子胀气怎么办 产后腰粗肚子大怎么办 发烧后腹泻拉水怎么办 又吐又拉还发烧怎么办 喝中药恶心想吐怎么办