#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的更多相关文章

  1. 图的深度优先遍历DFS

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

  2. 图的深度优先遍历(DFS) c++ 非递归实现

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

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

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

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

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

  5. 图的深度优先遍历(DFS)—递归算法

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

  6. java实现图的深度优先遍历和广度优先遍

    首先需要知道的是,图的深度优先遍历是一种类似于树的前序遍历方式,即选择一个入口节点,沿着这个节点一直遍历下去,直至所有节点都被访问完毕:如果说,图的深度优先遍历类似于树的前序遍历的话,那么图的广度优先 ...

  7. 图论 - 图的深度优先遍历c++实现

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

  8. 数据结构——图的深度优先遍历(邻接矩阵表示+java版本)

    ​1.深度优先遍历(DFS) 图的深度优先遍历本质上是一棵树的前序遍历(即先遍历自身,然后遍历其左子树,再遍历右子树),总之图的深度优先遍历是一个递归的过程. 如下图所示,左图是一个图,右图是图的深度 ...

  9. 1047图的深度优先遍历c语言

    描述 图(graph)是数据结构 G=(V,E),其中V是G中结点的有限非空集合,结点的偶对称为边(edge):E是G中边的有限集合.设V={0,1,2,……,n-1},图中的结点又称为顶点(vert ...

随机推荐

  1. 控制点:ControlPoint

    位于control:Points面板下,kitControl面板的ControlPallette中也存在控制点. 控制点是什么呢?一个数据值.一个传感器的值.比如,温度值,风速值,压力值,光照值,开关 ...

  2. java版-JQuery上传插件Uploadify使用实例

    摘自:http://itindex.net/detail/47160-java-jquery-%E4%B8%8A%E4%BC%A0 运行效果: 包结构图: 后台JAVA逻辑: package com. ...

  3. Jquery网页选项卡应用

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. 为什么要web语义化

    为什么要web语义化 其实wiki的定义里面说得非常清晰了.语义化的好处有三点 有利于搜索 容易兼容不同设备 结构清晰,利于团队的开发.维护

  5. shell脚本分类

    shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...

  6. postgresql配置的一些问题

    ubuntu通过软件中心安装后,配置文件位于如下目录 我用超级用户创建了其它数据库用户,发现是登录不了的,必须还得创建同名的linux用户,甚是麻烦.在配置文件pg_hba.conf中发现了问题. 其 ...

  7. Find them, Catch them(POJ 1703 关系并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38668   Accepted: ...

  8. HDU 1180 诡异的楼梯(BFS)

    诡异的楼梯 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  9. POJ 2488 A Knight's Journey(DFS)

    A Knight's Journey Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 34633Accepted: 11815 De ...

  10. Asp.Net MVC+EF+三层架构的完整搭建过程

    架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...