图的深度优先遍历的实现 c/c++ DFS
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define MAX 100
#define LENGTH(a) (sizeof(a) / sizeof(a[0]))
int visited[MAX];
typedef struct _graph{
char vexs[MAX];
int vexnum;
int edgnum;
int matrix[MAX][MAX];
}Graph,*PGgraph;
static int get_position(Graph g, char ch){
for(int i = 0;i<g.vexnum;i++){
if(ch == g.vexs[i])
return i;
}
return -1;
}
static char read_char(){
char ch;
while(!((((ch)>='a') && ((ch)<='z')) || (((ch)>='A') && ((ch)<='Z'))))
ch = getchar();
return ch;
}
Graph creat_graph(){
char c1,c2;
int v,e;
int p1,p2;
Graph pG;
cout<<"input number of vex > ";
cin>>v;
cout<<"input number of edge > ";
cin>>e;
//memset(pG,0,sizeof(Graph));
pG.vexnum = v;
pG.edgnum = e;
//Initialize vexs
for(int i=0; i<pG.vexnum;i++){
//pG.vexs[i] = read_char();
cin>>pG.vexs[i] ;
}
//Initialize edges
for(int i = 0;i < pG.edgnum; i++){
//c1 = read_char();
//c2 = read_char();
cin>>c1>>c2;
cout<<c1<<c2<<endl;
p1 = get_position(pG, c1);
p2 = get_position(pG, c2);
pG.matrix[p1][p2] = 1;
pG.matrix[p2][p1] = 1;
}
return pG;
}
static int next_vertex(Graph g, int v,int w){
if(v<0 || v>g.vexnum-1|| w<0 || w>(g.vexnum-1)) return -1;
for(int i=w+1; i < g.vexnum; i++){
if(g.matrix[v][i] == 1) return i;
}
return -1;
}
static int first_vertex(Graph g, int v){
if(v<0 || v>g.vexnum-1) return -1;
for(int i=0; i < g.vexnum; i++){
if(g.matrix[v][i] == 1) return i;
}
return -1;
}
void DFS(Graph g, int i){
if(visited[i] == 0){
visited[i] = 1;
cout<<g.vexs[i]<<" ";
}
int w = first_vertex(g,i);
for(;w>=0; w = next_vertex(g,i,w)){
if(!visited[w]) DFS(g,w);
}
}
int main(int argc, const char * argv[]) {
for(int i = 0; i < MAX; i++){
visited[i] = 0;
}
Graph g;
g= creat_graph();
for(int i = 0; i< g.vexnum; i++){
if(!visited[i]) DFS(g,i);
}
return 0;
}
图的深度优先遍历的实现 c/c++ DFS的更多相关文章
- 图的深度优先遍历DFS
图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件 ...
- 图的深度优先遍历(DFS) c++ 非递归实现
深搜算法对于程序员来讲是必会的基础,不仅要会,更要熟练.ACM竞赛中,深搜也牢牢占据着很重要的一部分.本文用显式栈(非递归)实现了图的深度优先遍历,希望大家可以相互学习. 栈实现的基本思路是将一个节点 ...
- PTA 邻接矩阵存储图的深度优先遍历
6-1 邻接矩阵存储图的深度优先遍历(20 分) 试实现邻接矩阵存储图的深度优先遍历. 函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)( ...
- C语言实现邻接矩阵创建无向图&图的深度优先遍历
/* '邻接矩阵' 实现无向图的创建.深度优先遍历*/ #include <stdio.h> #include <stdlib.h> #define MaxVex 100 // ...
- 图的深度优先遍历(DFS)—递归算法
实验环境:win10, DEV C++5.11 实验要求: 实现图的深度优先遍历 实验代码: #include <iostream> #define maxSize 255 #includ ...
- java实现图的深度优先遍历和广度优先遍
首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕:如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先 ...
- 图论 - 图的深度优先遍历c++实现
图的深度优先遍历c++实现 深度优先搜索 邻接矩阵的创建 int i, j, m, a, b; cin >> n >> m; //初始化二维矩阵 for (i = 1; i & ...
- 数据结构——图的深度优先遍历(邻接矩阵表示+java版本)
1.深度优先遍历(DFS) 图的深度优先遍历本质上是一棵树的前序遍历(即先遍历自身,然后遍历其左子树,再遍历右子树),总之图的深度优先遍历是一个递归的过程. 如下图所示,左图是一个图,右图是图的深度 ...
- 1047图的深度优先遍历c语言
描述 图(graph)是数据结构 G=(V,E),其中V是G中结点的有限非空集合,结点的偶对称为边(edge):E是G中边的有限集合.设V={0,1,2,……,n-1},图中的结点又称为顶点(vert ...
随机推荐
- js基础-需要注意的地方
---因为跟别的语言很像,所以只记录要注意的地方 1.== 和 === 的区别 ===要求类型也相等 "5"==5 = ture "5"===5 = false ...
- Ubuntu系统下搭建Python开发环境
之前演示了在Windows中安装Pycharm,很简单.下面介绍一下如何在Ubuntu中安装Pycharm 1.更新Python至3.5.1,执行以下命令: sudo add-apt-reposito ...
- Codeforces Round #277(Div 2) A、B、C、D、E题解
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud A. Calculating Function 水题,判个奇偶即可 #includ ...
- [转]PictureEx.h和PictureEx.cpp源文件
要显示一个gif,网上找了个,子类化了MFCl图片控件,用着方便,记一下 转自:http://www.bccn.net/Article/net/vcnet/jszl/200709/6386.html ...
- HDU 1556 Color the ball - from lanshui_Yang
Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a ...
- mysql中函数DISTINCT,group by,CONCAT及GROUP_CONCAT的使用
一:DISTINCT 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是 ...
- juqery合成事件toggle方法
当指定元素被点击时,在两个或多个函数之间轮流切换. 如果规定了两个以上的函数,则 toggle() 方法将切换所有函数.例如,如果存在三个函数,则第一次点击将调用第一个函数,第二次点击调用第二个函数, ...
- [ZooKeeper研究]二 ZooKeeper协议介绍
前面介绍了ZooKeeper的基本知识,这一节我们介绍一下ZooKeeper使用的协议.只有了解了ZooKeeper的协议,才能更好得理解ZooKeeper源代码的实现.ZooKeeper使用的是Za ...
- BC 65 ZYB's Premutation (线段树+二分搜索)
题目简述:有一个全排列,一直每个前缀区间的逆序对数,还原这个排列. fi记录逆序对数,pi记录该位置数值,则k=fi-f(i-1)表示前i-1个数比pi大的数的个数,那么只要在剩余元素求出按大小顺序第 ...
- POJ Find The Multiple 1426 (搜索)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22576 Accepted: 929 ...