当前位置:  编程技术>c/c++/嵌入式

C语言实现图的遍历之深度优先搜索实例

    来源: 互联网  发布时间:2014-10-28

    本文导语:  DFS(Depth-First-Search)深度优先搜索算法是图的遍历算法中非常常见的一类算法。分享给大家供大家参考。具体方法如下: #include #include #include using namespace std; #define MAX_VERTEX_NUM 10 struct Node { int adjvex; struct Node *next;...

DFS(Depth-First-Search)深度优先搜索算法是图的遍历算法中非常常见的一类算法。分享给大家供大家参考。具体方法如下:

#include 
#include 
#include 

using namespace std;  

#define MAX_VERTEX_NUM 10

struct Node
{
 int adjvex;
 struct Node *next;
 int info;
};

typedef struct VNode
{
 char data;
 Node *first;
}VNode, AdjList[MAX_VERTEX_NUM];

struct Graph 
{
 AdjList vertices;
 int vexnum, arcnum;
};

int visited[MAX_VERTEX_NUM];

int locateVex(Graph G, char u)
{
 int i;
 for (i = 0; i < G.vexnum; i++)
 {
 if (u == G.vertices[i].data)
  return i;
 }

 if (i == G.vexnum)
 {
 printf("Error u!n");
 exit(1);
 }

 return 0;
}

void createGraph(Graph &G)
{
 int i, j, k, w;
 char v1, v2, enter;

 Node *p;
 printf("input vexnum & arcnum:n");
 scanf("%d", &G.vexnum);
 scanf("%d", &G.arcnum);
 printf("input vertices:n");
 for (i = 0; i < G.vexnum; i++)
 {
 scanf("%c%c", &enter, &G.vertices[i].data);
 G.vertices[i].first = NULL;
 }

 printf("input Arcs(v1, v2, w):n");
 for (k = 0; k < G.arcnum; k++)
 {
 scanf("%c%c", &enter, &v1);
 scanf("%c%c", &enter, &v2);
 scanf("%d", &w);
 i = locateVex(G, v1);
 j = locateVex(G, v2);
 p = (Node *)malloc(sizeof(Node));
 p->adjvex = j;
 p->info = w;
 p->next = G.vertices[i].first;
 G.vertices[i].first = p;
 }
}

void DFS(Graph &G, int v)
{
 Node *p;
 printf("%c", G.vertices[v].data);
 visited[v] = 1;
 p = G.vertices[v].first;

 while (p)
 {
 if (!visited[p->adjvex])
  DFS(G, p->adjvex);
 p = p->next;
 }
}

void DFSTranverse(Graph &G)
{
 for (int v = 0; v < G.vexnum; v++)
 visited[v] = 0;
 for (int v = 0; v < G.vexnum; v++)
 {
 if (!visited[v])
  DFS(G, v);
 }
}

int main()
{
 Graph G;
 createGraph(G);
 DFSTranverse(G);
}

再换一种方式来写DFS。具体代码如下:

#include 
#include 

using namespace std;

#define MAXLEN 10

struct Node
{
 int data;
 Node *next;
};

struct Link
{
 int count;
 string name;
 Node *head;
};

struct Graph
{
 Link link[MAXLEN];
 int vexnum;
 int arcnum;
};

int findIndex(Graph &G, string name)
{
 int index = -1;

 for (int i = 0; i < G.vexnum; i++)
 {
 if (G.link[i].name == name)
 {
  index = i;
  break;
 }
 }

 if (index == -1)
 cout next = NULL;

 node->next = G.link[leftIndex].head;
 G.link[leftIndex].head = node;

 cout  leftName >> rightName;
 }
}

bool flag[MAXLEN];

void DFSTranverse(Graph &G, int num)
{
 cout next;
 }
}

void main()
{
 Graph G;
 constructGraph(G);
 for (int i = 0; i < MAXLEN; i++)
 flag[i] = false;
 DFSTranverse(G, 0);
}

DFS的迭代遍历算法如下:

void DFS(Graph &G)
{
 stack istack;
 istack.push(0);

 cout next;

 if (head != NULL)
 {
  index = head->data;
  if (!flag[index])
  {
  cout 

    
 
 

您可能感兴趣的文章:

  • C语言二叉树的非递归遍历实例分析
  • C语言实现二叉树遍历的迭代算法
  • 纯C语言:检索与周游广度深度遍历源码分享
  • HTML超文本标记语言教程及实例
  • LINUX 或者Windows 如何保证一个进程只有一个实例在运行?如果是C语言,JAVA语言开发,又怎么样保证?
  • 大家帮我推荐些在linux下用c语言对数据库操作编程的实例或资料吧!谢谢!
  • C语言构建动态数组完整实例
  • C语言实现堆排序的简单实例
  • C语言实现杨辉三角实例
  • c语言 字符串转大写的简单实例
  • C语言二维数组的处理实例
  • c语言如何实现只运行单个进程实例?
  • C语言中自动隐式转换与类型强制转换实例分析
  • C语言十进制转二进制代码实例
  • C语言变量类型与输出控制用法实例教程
  • C语言创建链表错误之通过指针参数申请动态内存实例分析
  • C语言的递归思想实例分析
  • C语言中qsort函数用法实例小结
  • C语言程序,软定时器应用的实例
  • c语言全盘搜索指定文件的实例代码
  • C语言连续子向量的最大和及时间度量实例
  • C语言安全之数组长度与指针实例解析
  • C语言循环队列的表示与实现实例详解
  • C语言单链队列的表示与实现实例详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C语言实现计算树的深度的方法
  • 2013年7月和2013年8月编程语言排行榜
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • C语言中间语言 CIL
  • PHP编程语言介绍及安装测试方法
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 动态编程语言 LIME编程语言
  • c语言实现MD5算法完整代码示例
  • C语言如何改变当前语言环境
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • 如何在VIM中使汇编语言和C语言自动缩进?
  • c语言基于libpcap实现一个抓包程序过程
  • 我安装的linux时默认语言选择的是中文,又乱码,怎么可以解决?怎么更改默认语言成英文?
  • MD5算法的C语言实现
  • Redhat9安装时语言只选择了中文,现在还能再增加其它语言的支持吗?如英文
  • HTML 脚本语言介绍及<script>标签用法
  • 请问哪里有ubuntu 9.0版本的中文语言包和KDE的中文语言包下载,我用Google搜索了很多地方都没有!




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3