深度优先搜索策略遍历g的非递归算法c语言,图的深度优先遍历(DFS) c++ 非递归实现...

深搜算法对于程序员来讲是必会的基础,不仅要会,更要熟练。ACM竞赛中,深搜也牢牢占据着很重要的一部分。本文用显式栈(非递归)实现了图的深度优先遍历,希望大家可以相互学习。

栈实现的基本思路是将一个节点所有未被访问的“邻居”(即“一层邻居节点”)踹入栈中“待用”,然后围绕顶部节点猛攻,每个节点被访问后被踹出。读者可以自己画图分析一下,难度并不大。 代码写的比较随意,仅供参考。~

#include

#include

using namespace std;

#define MaxNode 20

#define MAX 2000

#define StartNode 1

int map[MaxNode+][MaxNode+];

void dfs_stack(int start, int n){

int visited[MaxNode],s_top;

for(int i = ;i <= MaxNode; i++){

visited[i] = ;

}

visited[start] = ;

stack s;

cout<

for(int i = ; i <= n; i++){

if(map[i][start] == && !visited[i] ){

visited[i] = ;

s.push(i);

}

}

while(!s.empty()){

s_top = s.top();

visited[s_top] = ;

cout<

s.pop();

for(int i = ; i <= n; i++){

if(map[i][s_top] == && !visited[i] ){

visited[i] = ;

s.push(i);

}

}

}

}

int main(int argc, const char * argv[]) {

int num_edge,num_node;

int x,y;

cout<"<

cin>>num_node>>num_edge;

for(int i =;i

for(int j=;j

map[i][j] = ;

}

}

for(int i = ; i <= num_edge; i++){

cin>>x>>y;

map[x][y] = map[y][x] = ;

}

dfs_stack(StartNode, num_node);

return ;

}

图的深度优先遍历&lpar;DFS&rpar;和广度优先遍历&lpar;BFS&rpar;

body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

图的深度优先遍历DFS

图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...

图的深度优先遍历&lpar;DFS&rpar;—递归算法

实验环境:win10, DEV C++5.11 实验要求: 实现图的深度优先遍历 实验代码: #include #define maxSize 255 #includ ...

图的深度优先遍历&lpar;DFS&rpar;和广度优先遍历&lpar;BFS&rpar;算法分析

1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...

【C&plus;&plus;】基于邻接矩阵的图的深度优先遍历&lpar;DFS&rpar;和广度优先遍历&lpar;BFS&rpar;

写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

PTA 邻接矩阵存储图的深度优先遍历

6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...

广度优先遍历-BFS、深度优先遍历-DFS

广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3 ...

图论 - 图的深度优先遍历c&plus;&plus;实现

图的深度优先遍历c++实现 深度优先搜索 邻接矩阵的创建 int i, j, m, a, b; cin >> n >> m; //初始化二维矩阵 for (i = 1; i & ...

C语言实现邻接矩阵创建无向图&amp&semi;图的深度优先遍历

/* '邻接矩阵' 实现无向图的创建.深度优先遍历*/ #include #include #define MaxVex 100 // ...

随机推荐

iOS提交AppStore后申请加急审核

提交审核后进去下面链接申请加急审核链接:https://developer.apple.com/appstore/contact/appreviewteam/index.html 在I would l ...

ios开发错误之&colon; Undefined symbols for architecture x86&lowbar;64

错误如下: Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_RoutingHTTPServer", refere ...

node&period;js JS对象和JSON字符串之间的转换

JSON.stringify(obj)将JS对象转为字符串. var json = { aa: ['sdddssd'],   bb: [ '892394829342394792399', '23894 ...

《Nodejs开发加密货币》之二十七:开发通用的HTML组件

人的懒惰常常是麻烦的开始.多数程序员都希望自己的工作一劳永逸,一次开发,到处使用,成了人人追逐的目标,我也不例外.最初写系列文章,因为不喜欢设定好了去写,所以目 ...

这几个linux 命令

原文: linux性能分析 http://www.cnblogs.com/peida/tag/linux%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90/ du -sh /da ...

【Tomcat】batch获得war包

功能: 将maven项目打包复制到tomcat/webapps set git=C:\Users\zhengwenqiang\git set tomcat=e:\tomcat7.0.64 c: cd ...

Connections between cities

Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...

使用前端技术和MySQL&plus;PHP制作自己的一个个人博客网站

源代码地址:https://github.com/YauCheun/BlogCode 我的博客网站地址:http://www.yublog.fun/ 制作前景: 想拥有一个自己独自开发的一个小型博客网 ...

&lbrack;Swift&rsqb;LeetCode780&period; 到达终点 &vert; Reaching Points

A move consists of taking a point (x, y) and transforming it to either (x, x+y) or (x+y, y). Given a ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值