#include<iostream>
#define MVNUM  100  //最大顶点数
#define MAXQSIZE 100 //队列的最大长度
using namespace std;
typedef char VerTexType;    //假设顶点的数据类型为字符型
typedef int ArcType;    //假设边的权值类型为整型bool visited1[MVNUM];//dfs辅助数组
bool visited2[MVNUM];//bfs辅助数组
typedef struct
{VerTexType vexs[MVNUM]; //顶点表 ArcType arcs[MVNUM][MVNUM];//邻接矩阵int vexnum,arcnum;  //图的当前点数和边数
}AMGraph;
typedef struct{int *base;int front;int rear;
}SqQueue;
bool InitQueue(SqQueue &Q)
{Q.base = new int[MAXQSIZE];if(!Q.base) return false;Q.front = Q.rear = 0;return true;
}
bool EnQueue(SqQueue &Q,int e)
{if((Q.rear+1)%MAXQSIZE==Q.front) return false;//沾满Q.base[Q.rear] = e;Q.rear = (Q.rear+1)%MAXQSIZE;return true;
}
bool DeQueue(SqQueue &Q,int &e)
{if(Q.front==Q.rear) return false;//栈空e = Q.base[Q.front];Q.front=(Q.front+1)%MAXQSIZE;return true;
}
bool QueueEmpty(SqQueue Q)
{if(Q.front==Q.rear) return true;//空返回true,非空返回false return false;
}void createUDN(AMGraph &G)
{cout<<"请输入总顶点数:";cin>>G.vexnum;//输入总顶点数,总边数 cout<<"请输入总边数:";cin>>G.arcnum;cout<<"请输入各顶点信息:\n"; for(int i=0;i<G.vexnum;++i) {cin>>G.vexs[i];}//依次输入点的信息cout<<"输入完成,接下来构造邻接矩阵\n";//初始化邻接矩阵,边的权值 均置为极大值MAXINT for(int i=0;i<G.vexnum;++i)for(int j=0;j<G.vexnum;++j)G.arcs[i][j] = 0;//如果无连接,则把值设为0 //构造邻接矩阵 int v1,v2;for(int k=0;k<G.arcnum;++k){cout<<"输入边(Vi,Vj)的上下标i,j(空格隔开):";cin>>v1>>v2;G.arcs[v2][v1] = 1;G.arcs[v1][v2] = 1;} } //输出邻接矩阵
void OutPut(AMGraph &G)
{int i,j,count = 0;for(i = 0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++){cout<<G.arcs[i][j]<<" ";count++;if(count%G.vexnum==0)cout<<"\n";    }}
}
//深度优先
void DFS(AMGraph G,int k)
{int j;cout<<G.vexs[k]<<" ";visited1[k] = true;for(j = 0 ; j < G.vexnum ; ++j){if(G.arcs[k][j] != 0 && visited1[j] == 0)DFS(G,j);}
}//BFS
/*广度优先遍历*/
void visitEnQueue(AMGraph G,SqQueue &Q,int i)//访问顶点i入队列Q{visited2[i]= true; //设置当前顶点访问过cout<<G.vexs[i]<<" ";//打印顶点 EnQueue(Q,i); //将此顶点入队列}void BFS(AMGraph G)
{   int i,j;SqQueue Q;for(i=0;i<G.vexnum;i++)visited2[i] = false;InitQueue(Q); //初始化一辅助用的队列for(i=0;i<G.vexnum;i++)//对每一个顶点做循环{if(!visited2[i]) //若是未被访问过就处理{visitEnQueue(G,Q,i);//访问顶点iwhile(!QueueEmpty(Q))//若当前队列不为空{DeQueue(Q,i); //将队头元素出队并赋给ifor(j=0;j<G.vexnum;j++){ //判断其他顶点若与当前顶点存在边且未被访问过if(G.arcs[i][j]==1 && !visited2[j])visitEnQueue(G,Q,j);//访问顶点j,并将顶点J入队 }}}}}int main()
{AMGraph G;createUDN(G);cout<<"邻接矩阵为:\n";OutPut(G);cout<<"对此图深度遍历结果是:\n";DFS(G,0);cout<<endl;cout<<"对此图广度遍历结果是:\n";BFS(G);
}

图的创建以及遍历(邻接矩阵法存储图)相关推荐

  1. 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历

    邻接表法存储 邻接表发存储需要时无权无向图.用数组+链表的方式完成 数组用来记录地点,链表来记录每一个地点对应的相邻地点 1.构造一个数据结构来存放数组的序号以及指针用来指向链表 2.创造结点,构建链 ...

  2. 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)

    一.图的基本介绍 为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图. 图的举例 ...

  3. 数据结构——图的创建以及遍历

    第十二章 图 12.1 图的基本介绍 ​ 图是一种数据结构,其中节点可以具有零个或多个相邻元素.两个节点之间的连接称为边.节点也可以称为顶点 为什么要有图 前面我们学习了线性表和树 线性表局限于一个直 ...

  4. 图的表达与遍历--邻接矩阵和邻接表

    今天开始准备学习一个新的数据结构---图,貌似听着挺复杂的,当然实际也不容易啦,所以先从理论上对图有个大概的认识,其实之前咱们学的二叉树就是一种特殊的图,怎么个特殊法呢?因为它没有环,但是图是可以,它 ...

  5. 【数据结构-图】1.图的构造和遍历(基本理论+代码)

    一.图的基本概念 图: 图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交.它们亦可写成V(G)和E(G).其中,顶集的元素被称 ...

  6. 图/图的存储/图的遍历

    图的概念:图的数据结构由两个集合构成,一个是顶点集V (vertex),一个是边集E(Edge):无向图一般记为G(V , E) :有向图记为 G<V, E> 有向图就是边的指向是有方向区 ...

  7. 【恋上数据结构与算法 第二季】【04】图-基础实现_遍历_拓扑排序

    持续学习&持续更新中- 学习态度:脚踏实地 [恋上数据结构与算法 第二季][04]图-基础实现_遍历_拓扑排序 图的实现方案 邻接矩阵 邻接表 图的基础接口 顶点.边的定义 图的基础实现 图的 ...

  8. 图的建立、遍历及其应用(设图结点的元素类型为char,建立一个不少于8个顶点的带权无向图G,实现以下图的各种基本操作的程序)

    实验目的:通过实验达到: ⑴ 理解和掌握图的基本概念.基本逻辑结构: ⑵ 理解和掌握图的邻接矩阵存储结构.邻接链表存储结构: ⑶ 理解和掌握图的DFS.BFS遍历操作的思想及其实现: ⑷ 加深对堆栈. ...

  9. 基于线性表邻接矩阵结构的图的深度/广度优先搜索算法

    // 图的存储和遍历 #include <iostream> using namespace std; // ------------------------------------ // ...

最新文章

  1. 第二章:3、BP神经网络
  2. 6大准则+10道习题,终于有人把怎样选择图表讲明白了
  3. 6. Oracle闪回特性
  4. Android UI法宝的设计资源的开发
  5. 上海市经济信息化委关于征集本市2020年拟新建互联网数据中心项目的通知
  6. oracle 斜线出现次数,oracle一些操作小知识
  7. LAN远程重启server安全方法
  8. SDUTOJ 【1166】打印直角三角形
  9. 在现有的python环境下创建另一个python版本【亲测有效】
  10. 安装Oracle数据库操作步骤
  11. leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)
  12. 安卓内边距padding与外边距magrin
  13. java中criteria类_java – Criteria API:按类类型过滤
  14. Qt与MySQL通信错误及解决方法
  15. HDU1401 Solitaire
  16. 纠结的链接——ln、ln -s、fs.symlink、require
  17. vim编辑器使用详解
  18. 自写的简单屏蔽特定字符的TextBox和数字TextBox
  19. DEM高程数据的获取和应用(全国DEM数据可直接下载)
  20. linux查看网络静态ip配置文件,linux 配置静态ip地址

热门文章

  1. 勒让德n项多项式的m次求导
  2. c语言void要用什么头文件,什么是C语言头文件?
  3. 计算机课有平时成绩吗,大学计算机基础课程平时成绩评定方法探究.doc
  4. Flutter2.5新特性 中文版
  5. Queue Map 武魂融合技:MapQueue
  6. python中θ符号怎么打出来_各种符号在键盘上怎么打出来?
  7. Dell笔记本 BIOS改硬盘模式Raid改为ahci,开机蓝屏0xc0000001
  8. ZB级的大数据探索与应用实践【附PPT】
  9. 微服务-分布式锁(二)-Redis方案
  10. bzoj3894 文理分科 最小割