文件操作比直接输入方便许多

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 20/*邻接表的储存结构*/
typedef struct node /*表结点 或者 边表结点*/
{int adjvex;struct node *next;
}edgenode;typedef struct vnode /*头结点*/
{char vertex;edgenode *firsteage;
}vertexnode;typedef struct  /*邻接表类型*/
{vertexnode adjlist[M];int n,e;
}linkedgraph;int vis[M];void creat (linkedgraph *g,int c)
{int i,j,k;edgenode *s;FILE *f;f=fopen("test.txt","r");if(f){fscanf(f,"%d%d",&g->n,&g->e);for(i=0;i<g->n;i++){fscanf(f,"%1s",&g->adjlist[i].vertex);g->adjlist[i].firsteage=NULL;}for(k=0;k<g->e;k++){fscanf(f,"%d%d",&i,&j);s=(edgenode*)malloc(sizeof(edgenode));s->adjvex=j;s->next=g->adjlist[i].firsteage;g->adjlist[i].firsteage=s;if(c==0){s=(edgenode*)malloc(sizeof(edgenode));s->adjvex=i;s->next=g->adjlist[j].firsteage;g->adjlist[j].firsteage=s;}}fclose(f);}else{g->n=0;}
}void dfs(linkedgraph g,int i)
{edgenode *p;printf("%c ",g.adjlist[i].vertex);vis[i]=1;p=g.adjlist[i].firsteage;while(p){if(!vis[p->adjvex]){dfs(g,p->adjvex);}p=p->next;}
}void DfsTraverse(linkedgraph g)
{int i;memset(vis,0,sizeof(vis));printf("\nDFS:\n");for(i=0;i<g.n;i++){if(!vis[i]){dfs(g,i);printf("\n");}}printf("\n");
}void bfs(linkedgraph g,int i)
{int j;edgenode *p;int queue[M],front ,rear;front=0;rear=0;printf("%c ",g.adjlist[i].vertex);vis[i]=1;queue[rear++]=i;while(rear>front){j=queue[front++];p=g.adjlist[j].firsteage;while(p){if(vis[p->adjvex]==0){printf("%c ",g.adjlist[p->adjvex].vertex);queue[rear++]=p->adjvex;vis[p->adjvex]=1;}p=p->next;}}
}//返回连通分量的个数
int BfsTraverse(linkedgraph g)
{printf("BFS:\n");int i,count=0;memset(vis,0,sizeof(vis));for(i=0;i<g.n;i++){if(!vis[i]){count++;bfs(g,i);printf("\n");}}return count;
}void print(linkedgraph *g)
{printf("\n\n输出:\n");edgenode *p;int i;printf("一共有%d个结点,%d条边\n",g->n,g->e);for(i=0;i<g->n;i++){p=g->adjlist[i].firsteage;printf("V%d -> ",i);while(p){printf("%d",p->adjvex);if(p->next)printf(" -> ");p=p->next;}printf("\n");}
}int main ()
{int count;linkedgraph g;creat(&g,0);print(&g);DfsTraverse(g);count=BfsTraverse(g);printf("一共有%d个连通分量\n",count);return 0;
}

      

带权无向图的有区别的代码,有向图c=0即可。

typedef struct node /*表结点 或者 边表结点*/
{int adjvex;int data;struct node *next;
}edgenode;void creat (linkedgraph *g,int c)
{int i,j,k,w;edgenode *s;FILE *f;f=fopen("test.txt","r");if(f){fscanf(f,"%d%d",&g->n,&g->e);for(i=0;i<g->n;i++){fscanf(f,"%1s",&g->adjlist[i].vertex);g->adjlist[i].firsteage=NULL;}for(k=0;k<g->e;k++){fscanf(f,"%d%d%d",&i,&j,&w);s=(edgenode*)malloc(sizeof(edgenode));s->data=w;s->adjvex=j;s->next=g->adjlist[i].firsteage;g->adjlist[i].firsteage=s;if(c==0){s=(edgenode*)malloc(sizeof(edgenode));s->data=w;s->adjvex=i;s->next=g->adjlist[j].firsteage;g->adjlist[j].firsteage=s;}}fclose(f);}else{g->n=0;}
}void print(linkedgraph *g)
{printf("\n\n输出:\n");edgenode *p;int i;printf("一共有%d个结点,%d条边\n",g->n,g->e);for(i=0;i<g->n;i++){p=g->adjlist[i].firsteage;printf("V%d -> ",i);while(p){printf("%d (w = %d)",p->adjvex,p->data);if(p->next)printf(" -> ");p=p->next;}printf("\n");}
}

【数据结构】图的深度优先遍历 广度优先遍历相关推荐

  1. P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序。

    P202 例9-2 以如图9-8所示的带权有向图为例,编写测试上述图的深度优先和广度优先遍历函数的程序. 头文件1:SeqList.h #include<stdio.h>#define M ...

  2. c++ 数据结构 图的应用(实现图的深度优先和广度优先遍历)——以邻接表为存储结构

    数据结构实习--图及应用(图的遍历) 一.问题描述 很多涉及图上操作的算法都是以图的遍历操作为基础的.试写一个程序,演示无向图的遍历操作. 二.基本要求 以邻接表为存储结构,实现连通无向图的深度优先和 ...

  3. 图数据结构,以及使用递归方式实现图的深度优先和广度优先遍历

    源码概览 1.GraphDemo,用于演示一个图结构以及图的遍历. 2.Graph,表示图数据结构,维护顶点的集合与边的集合,并提供广度优先遍历和深度优先遍历方法. 3.Edge<V>,表 ...

  4. 以0结点为起点实现上述图的深度优先和广度优先遍历算法

    MatGraph.h #pragma once #include <iostream> using namespace std;#define MAXV 7 //最大顶点个数 #defin ...

  5. 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件:       ⑴有且仅有一个结点没有前驱 ...

  6. 图的理解:深度优先和广度优先遍历及其 Java 实现

    遍历 图的遍历,所谓遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: 深度优先遍历 广度优先遍历 深度优先 深度优先遍历,从初始访问结点出发,我们知道 ...

  7. 【图】深度优先遍历 广度优先遍历

    文章目录 一.广度优先遍历 二.深度优先遍历 深度优先遍历和广度优先遍历是遍历图的两种常见方式,接下来就通过这两种方式来实现一下图具体遍历的过程 当我位于游乐园的景区 A 时,为了玩遍所有的景区我们有 ...

  8. 【2023王道数据结构】【图】通过C++实现图的BFS(广度优先遍历)算法求单源最短路径问题C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 通过C++实现图的BFS(广度优先遍 ...

  9. 【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...

    [树]二叉树遍历算法(深度优先.广度优先遍历,前序.中序.后序.层次)及Java实现 目录 一.前序遍历 二.中序遍历 三.后序遍历 四.层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它 ...

  10. python创建树结构、求深度_数据结构-树以及深度、广度优先遍历(递归和非递归,python实现)...

    前面我们介绍了队列.堆栈.链表,你亲自动手实践了吗?今天我们来到了树的部分,树在数据结构中是非常重要的一部分,树的应用有很多很多,树的种类也有很多很多,今天我们就先来创建一个普通的树.其他各种各样的树 ...

最新文章

  1. 设计模式的征途—17.模板方法(Template Method)模式
  2. 如何修改手机服务器的ip地址,怎么修改手机服务器ip地址
  3. linux消息队列非亲缘,linux进程
  4. Docker官方Centos镜像下安装Elasticsearch【详细步骤】
  5. MEF初体验之五:Lazy Exports
  6. python人工智能面试题_人工智能面试题分享(含答案)
  7. 设置Java EE 6开发环境
  8. ++ba--运算结果解析
  9. VS2005调试器 1,断点设置有技巧(转载)
  10. linux修改管理员密码后保存,各类unix和linux管理员密码丢失解决方法
  11. jquery鼠标右键事件
  12. 数据标准在网易的实践
  13. web用pdfobject 对pdf 预览文件
  14. 用户画像第四章(企业级360°用户画像_标签开发_挖掘标签_ 客户价值模型-RFM)
  15. Android TalkingData集成 注意事项
  16. ybt1357 车厢调度
  17. Zeppplin的安装,配置与使用
  18. 直播系统解决方案-搭建你自己的直播平台
  19. function Function函数
  20. Ubuntu 16.04系统实用插件安装方法

热门文章

  1. Java零基础学习难吗
  2. 零基础怎么学UI设计
  3. 关于虚拟化技术软硬件兼容问题的探讨
  4. Objective C浅拷贝和深拷贝
  5. 手动初始化设置3PAR存储系统
  6. 什么是新IP的四层网络技术
  7. Android APP测试的日志文件抓取
  8. 你的微笑,拂过我的心海
  9. 暑期集训5:并查集 线段树 练习题F:  HDU - 1166 ​​​​​​​
  10. 暑期集训1:C++STL 例3:UVA-12100