[2018年最新整理]图的遍历算法.docVIP

  • 1
  • 0
  • 约4.21千字
  • 约 7页
  • 2018-04-15 发布于浙江
  • 举报
[2018年最新整理]图的遍历算法

昌吉学院计算机计算机工程系学生实验报告 班级: B1103班 姓名 乃比江塔依尔 学号1125929073 日期 2013年12月06号 课程名称 数据结构 实验室名称 1324 实验名称 图的遍历算法 指导教师 香丽芸 成绩 一、实验目的 1、使学生可以巩固所学的有关图的基本知识。 ?2、熟练掌握图的存储结构。 ?3、熟练掌握图的两种遍历算法。 二、实验原理和内容 实验原理: 深度优先搜索遍历是树的先根遍历的推广。假设初始状态时图中所有顶点未曾访问,则深度优先搜索可从图中某个顶点a出发,访问此顶点,然后依次从a的未被访问的邻接点出发深度优先遍历图,直至图中所有与a有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 实验内容: 编写函数实现队列的删除功能,编写函数实现队列的插入功能编写程序实现以下功能 三、实验步骤 深度优先算法:计算机程序的一种编制原理,就是在一个问题出现多种可以实现的方法和技术的时候,应该优先选择哪个更合适的,也是一种普遍的逻辑思想,此种思想在运算的过程中,用到计算机程序的一种递归的思想。? ?? 度优先搜索算法:又称广度优先搜索,是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim?最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话?说,它并不考虑结果的可能位址,彻底地搜索整张图,直到找到结果为止。 代码如下: #includestdio.h #includemalloc.h typedef struct linknode{ int adjvecx; struct linknode *next; }linknode; typedef struct vnode{ char data; linknode *first; }vnode,adjlist[100]; typedef struct{ int n; adjlist vertices; }graph; int visited[10]; struct queue{ int rear,front; int node[100]; }; //队的初始化 void initqueue(queue Q){ Q.rear=-1; Q.front=-1; for(int i=0;i100;i++) Q.node[i]=0; } //判断队是否为空 int isEmpty(queue Q){ if(Q.rear==Q.front) return 0; else return 1; } //入队 void enqueue(queue Q,int e){ Q.rear=(Q.rear+1)%100; Q.node[Q.rear]=e; // Q.rear=(Q.rear+1)%100; } //出队 int dequeue(queue Q){ int v; if(isEmpty(Q)==0){ printf(该队列为空\n); } Q.front=(Q.front+1)%100; v=Q.node[Q.front]; return v; // for(int i=0;i100;i++){ // Q.node[n+1]=Q.node[n]; // } } //构建链表 void creatlinknode(graph *g,int k){ linknode *p,*q;int a,b,j; // p=G.vertices[k].first; printf(请输入第%d个顶点所指向的顶点的个数:,k+1); scanf(%d,a); if(a!=0) { printf(输入其所指向的第1个定点的位置:); scanf(%d,b); q=(struct linknode*)malloc(sizeof(struct linknode)); q-adjvecx=b;q-next=NULL; g-vertices[k].first=q; p=q; for( j=0;ja-1;j++) { printf(输入其所指向的第%d个定点的位置:,j+2); scanf

文档评论(0)

1亿VIP精品文档

相关文档