ImageVerifierCode 换一换
格式:PDF , 页数:21 ,大小:544.46KB ,
资源ID:10652977      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10652977.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言大作业西工大.pdf)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

C语言大作业西工大.pdf

1、 实 验 报 告 课程名称 数据结构 实验项目 实现深度优先搜索与广度优先搜索算法 一、 实验 目的 1、通过本实验,掌握图,无向图的基本概念,掌握图的遍 历; 2、掌握图的深度优先搜索( DFS)与广度优先搜索( BFS)算法。 二、实验内容 1、建立图的存储方式; 2、图的深度优先搜索算法; 3、图的广度优先搜索算法。 三 、 实验原理 图的遍历是图的算法中一种非常重要的算法,通过建立图的存储结构,采用深度优先搜索与广度优先搜索算法可以进行图的遍历; 深度优先遍历是树的先根遍历的推广,是将某一条枝上的所有节点都搜索到了之后,才转向搜索另一条枝上的所有节点; 广度优先遍历与深度优先遍历的区别

2、在于:广度优先遍历是以层为顺序,将某一层上的所有节点都搜索到了之后 才向下一层搜索。 四、实验步骤 1建立图的存储结构; 2输入图的基本接点与信息,初始化图; 3编写图的深度优先搜索( DFS)和广度优先搜索算法( BFS)程序; 4.采用菜单形式进行显示与选择。 5.测试数据和结果显示 ( 1)从键盘输入顶点数和边数; ( 2)输入顶点信息; ( 3)输入边的信息,以( a,b)的形式输入边的信息,构建一个无向图; ( 4)对此无向图进行深度优先搜索和广度优先搜索,并输出正确的序列。 五、程序源代码及注释 #include #include #include #define MAX_VERT

3、EX_NUM 20 typedef struct ArcNode int adjvex; struct ArcNode* nextarc; ArcNode; typedef struct VNode char cData; ArcNode* firstarc; VNode,AdjListMAX_VERTEX_NUM; typedef struct AdjList vertices; int vexnum; int arcnum; ALGraph; typedef struct LinkNode ArcNode* parc; struct LinkNode* next; LinkNode; in

4、t VisitedMAX_VERTEX_NUM; int PrintCheck(ALGraph* pag) int i; ArcNode* p; printf(“nCheck the Graph!n“); printf(“Notdatatnexttnextt.n“); for(i=0; ivexnum; i+) printf(“%dt%ct“,i,pag-verticesi.cData); p = pag-verticesi.firstarc; while(p) printf(“%dt“,p-adjvex); p = p-nextarc; printf(“n“); return 1; int

5、CreateGraph(ALGraph* pag,int start,int end) ArcNode* arcNodes = (ArcNode*)malloc(sizeof(ArcNode); ArcNode* arcNodee = (ArcNode*)malloc(sizeof(ArcNode); ArcNode* p; if(!arcNodes | !arcNodee) return 0; arcNodes-adjvex = end; p = pag-verticesstart.firstarc; if(!p) arcNodes-nextarc = pag-verticesstart.f

6、irstarc; pag-verticesstart.firstarc = arcNodes; else while(p-nextarc) p = p-nextarc; p-nextarc = arcNodes; arcNodes-nextarc = NULL; arcNodee-adjvex = start; p = pag-verticesend.firstarc; if(!p) arcNodee-nextarc = pag-verticesend.firstarc; pag-verticesend.firstarc = arcNodee; else while(p-nextarc) p

7、= p-nextarc; p-nextarc = arcNodee; arcNodee-nextarc = NULL; return 1; void DFS(ALGraph ag,int start) LinkNode* Stack = (LinkNode*)malloc(sizeof(LinkNode); LinkNode* pStack = (LinkNode*)malloc(sizeof(LinkNode); LinkNode* temp; ArcNode* p; int i; if(!pStack|!Stack) return; Stack-next=NULL; p=ag.vertic

8、esstart.firstarc; Visitedstart=1; printf(“n输出深度优先遍历顺序 :“); printf(“ %c “,ag.verticesstart.cData); while(1) pStack-parc = p; pStack-next = Stack-next; Stack-next = pStack; while(p else Visitedp-adjvex=1; printf(“ %c “,ag.verticesp-adjvex.cData); pStack = (LinkNode*)malloc(sizeof(LinkNode); if(!pStack

9、) return; pStack-parc = p; pStack-next = Stack-next; Stack-next = pStack; p = ag.verticesp-adjvex.firstarc; temp = Stack-next; Stack-next = temp-next; p = temp-parc-nextarc; free(temp); for(i=0; inext = NULL; printf(“n输出广度优先遍历次序 :“); printf(“ %c “,ag.verticesstart.cData); p = ag.verticesstart.firsta

10、rc; Visitedstart = 1; while(1) pQueue-parc = p; Queue-next = pQueue; pQueue-next = NULL; last = pQueue; while(p printf(“ %c “,ag.verticesp-adjvex.cData); pQueue = (LinkNode*)malloc(sizeof(LinkNode); if(!pQueue) return; pQueue-parc = p; pQueue-next = NULL; last-next = pQueue; last = last-next; p = p-

11、nextarc; temp = Queue-next; p = ag.verticestemp-parc-adjvex.firstarc; Queue -next = temp-next; for(i=0; i0) break; else printf(“n请注意结点个数不能大于 20,并且不能为 0!n“); ag.vexnum = n; printf(“n初始化图的结点,输入字符并回车 :n“); for(i=0; i=0) break; else printf(“n请注意边的数量不能大于 %d,并且不能小于 1!n“,m); ag.arcnum = i; printf(“n初始化图的边,

12、结点从 0开始计,最大为 %dn“,n-1); for(i=1; i条边的起点 : “,i); fflush(stdin); scanf(“%d“, if(start=0) break; else printf(“重新输入 “); while(1) printf(“第 条边的终点 : “,i); fflush(stdin); scanf(“%d“, if(end=0 else printf(“重新输入 “); printf(“n“); CreateGraph( PrintCheck( printf(“n开始进行图的遍历 !n“); while(1) printf(“请输入深度优先遍历的开始结点

13、 :“); fflush(stdin); scanf(“%d“, if(choose=0 GLfloat sourceLight = 0.8f, 0.8f, 0.8f, 1.0f ; GLfloat lightPos = 0.0f, 0.0f, 0.0f, 1.0f ; / Earth and Moon angle of revolution地球与月球的回转角 GLfloat fMoonRot = 10.0f; GLfloat fEarthRot = 29.786f; GLfloat fMercuryRot = 47.874f; GLfloat fVenusRot = 35.024f; GLf

14、loat fMarsRot = 24.131f; GLfloat fJupiterRot = 13.059f; GLfloat fSaturnRot = 9.644f; GLfloat fUranusRot = 6.799f; GLfloat fNeptuneRot = 5.433f; /对行星进行染色和渲染 void Neptune() glColor3ub(162,76,90); glutSolidSphere(22.0f,30,30); void Uranus() glColor3ub(146,88,47); glutSolidSphere(22.5f,30,30); void Satu

15、rn() glColor3ub(100,70,59); glutSolidSphere(29.0f,30,30); void Jupiter() glColor3ub(49,50,112); glutSolidSphere(30.0f,30,30); void Mars() glColor3ub(40,70,10); glutSolidSphere(7.50f,30,30); void Venus() glColor3ub(26,112,12); glutSolidSphere(7.0f,30,30); void Mercury() glColor3ub(8,46,19); glutSolid

16、Sphere(5.0f,30,30); void Moon() glColor3ub(0,200,0); glutSolidSphere(5.0f,30,30); void Earth() glColor3ub(46,10,0); glutSolidSphere(15.0f,30,30); glPushMatrix(); glRotatef(fMoonRot,0.0f,1.0f,0.0f); glTranslatef(25.0f,0.0f,0.0f); Moon(); glPopMatrix(); /设置各行星绕太阳独立旋转 void Solar() glColor3ub(255,63,0);

17、 glutSolidSphere(40.0f,30,30); glPushMatrix(); glRotatef(fMercuryRot,0.0f,1.0f,0.09f); glTranslatef(48.50f,0.0f,0.0f); Mercury(); glPopMatrix(); glPushMatrix(); glRotatef(fVenusRot,0.0f,1.0f,0.07f); glTranslatef(54.0f,0.0f,0.0f); Venus(); glPopMatrix(); glPushMatrix(); glRotatef(fEarthRot,0.0f,1.0f,

18、0.05f); glTranslatef(69.50f,0.0f,0.0f); Earth(); glPopMatrix(); glPushMatrix(); glRotatef(fMarsRot,0.0f,1.0f,0.09f); glTranslatef(118.50f,0.0f,0.0f); Mars(); glPopMatrix(); glPushMatrix(); glRotatef(fJupiterRot,0.0f,1.0f,.06f); glTranslatef(778.0f/2,0.0f,0.0f); Jupiter(); glPopMatrix(); glPushMatrix

19、(); glRotatef(fSaturnRot,0.0f,1.0f,0.12f); glTranslatef(1426.0f/6,0.0f,0.0f); Saturn(); glPopMatrix(); glPushMatrix(); glRotatef(fUranusRot,0.0f,1.0f,0.08f); glTranslatef(2870.0f/6,0.0f,0.0f); Uranus(); glPopMatrix(); glPushMatrix(); glRotatef(fNeptuneRot,0.0f,1.0f,0.14f); glTranslatef(4497.0f/6,0.0

20、f,0.0f); Neptune(); glPopMatrix(); / Called to draw scene绘制场景 void display(void) glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glTranslatef(0.0f,0.0f,-400.0f); Solar(); glPopMatrix(); glutSwapBuffers(); / This function does any needed initialization

21、 on the rendering这个函数做任何渲染所需的初始化 / context. void init() / Light values and coordinates光值和坐标 glEnable(GL_DEPTH_TEST); / Hidden surface removal隐面消除 glFrontFace(GL_CCW); / Counter clock-wise polygons face out逆时针多边形面临出局 glEnable(GL_CULL_FACE); / Do not calculate inside of jet不计算里面喷射 / Enable lighting启用照

22、明 glEnable(GL_LIGHTING); / Setup and enable light 0设置并启用光 0 glLightModelfv(GL_LIGHT_MODEL_AMBIENT,whiteLight); glLightfv(GL_LIGHT0,GL_DIFFUSE,sourceLight); glLightfv(GL_LIGHT0,GL_POSITION,lightPos); glEnable(GL_LIGHT0); / Enable color tracking启用颜色跟踪 glEnable(GL_COLOR_MATERIAL); / Set Material proper

23、ties to follow glColor values设置材料属性,遵循 glColor值 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); / Blue blue backgroun绿色的背景 glClearColor(0.2f, 2.0f, 0.0f, 1.0f ); void move(void) fMoonRot+= 0.50f; if(fMoonRot 360.0f) fMoonRot = 0.0f; / Step earth orbit .25 degrees步骤地球轨道 0.25度 fEarthRot += .29786f;

24、 if(fEarthRot 360.0f) fEarthRot = 0.0f; fMercuryRot += .47874f; if(fMercuryRot 360.0f) fMercuryRot = 0.0f; fVenusRot += .35024f; if(fVenusRot 360.0f) fVenusRot = 0.0f; fMarsRot += .24131f; if(fMarsRot 360.0f) fMarsRot = 0.0f; fJupiterRot += .13059f; if(fJupiterRot 360.0f) fJupiterRot = 0.0f; fSaturn

25、Rot += .09644f; if(fSaturnRot 360.0f) fSaturnRot = 0.0f; fUranusRot += .06799f; if(fUranusRot 360.0f) fUranusRot = 0.0f; fNeptuneRot += .05433f; if(fNeptuneRot 360.0f) fNeptuneRot = 0.0f; glutPostRedisplay(); void reshape(int w, int h) GLfloat fAspect; / Prevent a divide by zero防止被零除 if(h = 0) h = 1

26、; / Set Viewport to window dimensions设置视口窗口尺寸 glViewport(0, 0, w, h); / Calculate aspect ratio of the window计算窗口的纵横比 fAspect = (GLfloat)w/(GLfloat)h; / Set the perspective coordinate system设置的立体坐标系 glMatrixMode(GL_PROJECTION); glLoadIdentity(); / field of view of 90 degrees, near and far planes 1.0

27、and 425字段 90度,近平面和远平面 2.0和 425 gluPerspective(90.0f, fAspect, 1.0, 1000.0); / Modelview matrix reset模型视点矩阵复位 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); void InitAWindow(int argc, char *argv) glutInit( glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800,800); glutCreateWindow(“Sun System:the eight and the one“); return; int main(int argc, char* argv) InitAWindow(argc, argv); glutReshapeFunc(reshape); glutDisplayFunc(display); glutIdleFunc(move); init(); glutMainLoop(); return 0;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报