邻接矩阵的深度优先遍历

#include

#include

using namespace std;

#define INFINITY 32767

#define MAX_VEX 50

#define OK 1

#define FALSE 0

#define TRUE 1

#define ERROR -1

bool *visited;

//图的邻接矩阵存储结构

typedef struct {

char *vexs; //动态分配空间存储顶点向量

int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵

int vexnum, arcnum; //图的当前定点数和弧数

}Graph;

//图G 中查找顶点c 的位置

int LocateVex(Graph G, char c) {

for(int i = 0; i

if(G.vexs[i] == c) return i;

}

return ERROR;

}

//创建无向网

void CreateUDN(Graph &G){

//采用数组(邻接矩阵)表示法,构造无向图G

cout

cin >> G.vexnum >> G.arcnum;

cout

G.vexs = (char *) malloc((G.vexnum+1) * sizeof(char));

//构造顶点向量

for(int i = 0; i

cout

cin >> G.vexs[i];

}

G.vexs[G.vexnum] = '\0';

//需要开辟多一个空间存储'\0'

//初始化邻接矩阵

for(int i = 0; i

for( int j = 0; j

G.arcs[i][j] = INFINITY;

cout

char a, b;

int s1, s2;

for(int i = 0; i

cout

cin >> a >> b ;

s1 = LocateVex(G,a); //找到a 和b 在顶点向量中的位置 s2 = LocateVex(G,b);

}

}

//图G 中顶点k 的第一个邻接顶点

int FirstVex(Graph G,int k){

for(int i = 0; i

if (G.arcs[k][i] != INFINITY) return i;

return ERROR;

}

//返回i (相对于j )的下一个邻接顶点

int NextVex(Graph G,int i,int j){

for(int k = j+1; k

if(G.arcs[i][k] != INFINITY) return k;

return ERROR;

}

void DFS(Graph G, int v) {

//从第v 个顶点出发递归地深度优先遍历图G

visited[v] = TRUE;

cout

for(int w = FirstVex(G,v); w >= 0; w = NextVex(G,v,w))

if(!visited[w]) DFS(G,w);

}

//深度优先遍历

void DFSTraverse(Graph G, int i) {

for(int j = 0; j

}

//遍历结点

for(; i

if(!visited[i]) DFS(G,i);

}

//主函数

int main(){

Graph G;

CreateUDN(G);

visited = (bool *) malloc(G.vexnum * sizeof(bool)); cout

DFSTraverse(G,0);

cout

}

#include

#include

using namespace std;

#define INFINITY 32767

#define MAX_VEX 50

#define OK 1

#define FALSE 0

#define TRUE 1

#define ERROR -1

bool *visited;

//图的邻接矩阵存储结构

typedef struct {

char *vexs; //动态分配空间存储顶点向量

int arcs[MAX_VEX][MAX_VEX]; //邻接矩阵

int vexnum, arcnum; //图的当前定点数和弧数

}Graph;

//图G 中查找顶点c 的位置

int LocateVex(Graph G, char c) {

for(int i = 0; i

if(G.vexs[i] == c) return i;

}

return ERROR;

}

//创建无向网

void CreateUDN(Graph &G){

//采用数组(邻接矩阵)表示法,构造无向图G

cout

cin >> G.vexnum >> G.arcnum;

cout

G.vexs = (char *) malloc((G.vexnum+1) * sizeof(char));

//构造顶点向量

for(int i = 0; i

cout

cin >> G.vexs[i];

}

G.vexs[G.vexnum] = '\0';

//需要开辟多一个空间存储'\0'

//初始化邻接矩阵

for(int i = 0; i

for( int j = 0; j

G.arcs[i][j] = INFINITY;

cout

char a, b;

int s1, s2;

for(int i = 0; i

cout

cin >> a >> b ;

s1 = LocateVex(G,a); //找到a 和b 在顶点向量中的位置 s2 = LocateVex(G,b);

}

}

//图G 中顶点k 的第一个邻接顶点

int FirstVex(Graph G,int k){

for(int i = 0; i

if (G.arcs[k][i] != INFINITY) return i;

return ERROR;

}

//返回i (相对于j )的下一个邻接顶点

int NextVex(Graph G,int i,int j){

for(int k = j+1; k

if(G.arcs[i][k] != INFINITY) return k;

return ERROR;

}

void DFS(Graph G, int v) {

//从第v 个顶点出发递归地深度优先遍历图G

visited[v] = TRUE;

cout

for(int w = FirstVex(G,v); w >= 0; w = NextVex(G,v,w))

if(!visited[w]) DFS(G,w);

}

//深度优先遍历

void DFSTraverse(Graph G, int i) {

for(int j = 0; j

}

//遍历结点

for(; i

if(!visited[i]) DFS(G,i);

}

//主函数

int main(){

Graph G;

CreateUDN(G);

visited = (bool *) malloc(G.vexnum * sizeof(bool)); cout

DFSTraverse(G,0);

cout

}


相关文章

  • 数据结构--图的基本操作
  • 1.实验题目 图的基本操作 2.实验目的 1) 掌握图的邻接矩阵.邻接表的表示方法. 2) 掌握建立图的邻接矩阵的算法. 3) 掌握建立图的邻接表的算法. 4) 加深对图的理解,逐步培养解决实际问题的编程能力 3.需求分析 (1)编写图基本 ...查看


  • 邻接矩阵表示图_深度_广度优先遍历
  • *问题描述: 建立图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵. 1.邻接矩阵表示法: 设G=(V,E) 是一个图,其中V={V1,V2,V3-,Vn}.G 的邻接矩阵是一个他有下述性质的n 阶方阵 ...查看


  • 数据结构答案
  • 第一章 一.选择题 1 从逻辑上可以把数据结构分为( C)两大类. A .动态结构.静态结构 B.顺序结构.链式结构 C .线性结构.非线性结构 D.初等结构.构造型结构 2在下面的程序段中,对x 的赋值语句的频度为(C ) FOR i:= ...查看


  • 数据结构与算法试卷A答案
  • 滁州学院2013/2014学年度第一学期期末考试试卷参考答案 1开始的按照所画的邻接矩阵写出深度优先遍历和广度优先遍历顺序. :号学 :名姓 :班级/级年 :业专 级<数据结构与算法>A 卷 邻接矩阵 0101000 (时间12 ...查看


  • 数据结构导论试题1
  • 全国2004年10月高等教育自学考试 1.要将现实生活中的数据转化为计算机所能表示的形式,其转化过程依次为( ) A.逻辑结构.存储结构.机外表示 B.存储结构.逻辑结构.机外表示 C.机外表示.逻辑结构.存储结构 D.机外表示.存储结构. ...查看


  • 图的遍历与最小生成树
  • 二中信息学奥赛培训讲义 图论1--图的遍历与图的最小生成树 一.图的遍历 图的遍历:从图的某顶点出发,访问图中所有顶点,并且每个顶点仅访问一次.在图中,访问部分顶点后,可能又沿着其他边回到已被访问过的顶点.为保证每一个顶点只被访问一次,必须 ...查看


  • 数据结构A教学大纲
  • 数据结构A 教学大纲 (Data Structures A) 课程编号: 06311360 学 分: 5.0 学 时: 75 (其中:讲课学时:60 实验学时:0 上机学时:15) 先修课程:离散数学.程序设计基础.面向对象程序设计 适用专 ...查看


  • 04年工硕数据结构试题及答案
  • 注:1.除第九题外,其他各题每题10分,第九题20分. 2.所有试题的答案写在答题纸上. 一.判断下列叙述的对错. (1)线性表的逻辑顺序与物理顺序总是一致的. (2)线性表的顺序存储表示优于链式存储表示. (3)线性表若采用链式存储表示时 ...查看


  • 数据结构考试题
  • 1.已知线性表A,B,C 是递增有序的线性表.要求对A 表作如下运算:删去那些既在B 表 中出现又在C 表中出现的元素.A,B,C 以顺序表存储. #include #include #define maxsize 100 typedef ...查看


热门内容