C语言版飞机订票系统_第1页
C语言版飞机订票系统_第2页
C语言版飞机订票系统_第3页
C语言版飞机订票系统_第4页
C语言版飞机订票系统_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、订票系统1. 需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓) ;可以输入起飞抵达城市,查询飞机航班情况;订票: (订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结

2、构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:主菜单0123456789输列出按航按订票退票修改保存读取退出入航班班号城程序系统飞机文件文航的信查询市航班件、班息航班来的信下载的信息查息文件信询息航班B:各分块模板的构造流程图:0.输入航班的信息航班号起飞城市降落城市出发时间降落时间剩下的座位价格折扣1.列出航班的信息继续y退出 n2.按航班号查询航班信息输入所需要查询的航班号显示这个航班的的信息3.按城市来查询航班输入起飞城市输入降落城门显示这个航班的信息4 .订票程序输入号码输入名字输入ID需要定的票数航班号5 .退票系统输入航班号6.修改飞机航班的信息输入你ID

3、确定退票1输入剜罗改的航班号 否70重新输入新的航班信息7.保存文件显示保存成功3:功能函数设计:(1):订票系统主菜单函数menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。(2):工作人员管理函数 enter()&change ()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。enter ()函数的构造就是为了解决这个问题。而有可

4、能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change ()函数。( 3) :列出航班信息的函数list ()乘客需要查询各个航班的信息, 所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。( 4)乘客具体查询函数search ()本函数分两个分函数: search1 ()和 search2 () ,它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。( 5)票务管理函数book () &quit ()通过 book ()函数可以实现乘客的订票操作,通过quit ()可以实现乘客的退票操作

5、。( 6)文件操作函数save () &load ()3.源程序代码:(WIN TC下运行)#include <dos.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 20#define Q 40/* 定义数据结构 */* 乘客信息 */typedef structcharnumber10;/*编号*/charid20;/*证件号*/charname10;/*姓名*/int count;/*订票数*/char flightname10; /* 乘坐航班

6、号*/GUEST;/* 航班信息 */typedef struct char planenumber10; /* 航班号 */char Take_off_city20; /* 起飞城市 */char Arrived_in_city20; /* 抵达城市 */char takeoff_time20; /* 起飞时间 */char Landing_time20;/* 降落时间 */int shipping;/* 舱位数 */char price5;/* 票价 */char discount5;/* 折扣 */GUEST guest20;int sit;FLY;/* 菜单函数,函数返回值为整数,代表

7、所选的菜单项 */menu_select()int c;printf( "按任意键返回主菜单n" ); /* 提示压任意键继续 */getch(); /* 读入任意字符*/printf( "Welcome tonn");printf(Tickets Booking Systemnn);printf(printf( "0.输入航班信息 n" );printf( "1.列出航班的信息 n" );printf( "2.按航班号查询航班信息 n"printf( "3.按城市来查询航班n&quo

8、t; );printf( "4.订票程序 n" );printf( "5.退票系统n" );printf( "6.修改飞机航班的信息 n" );printf( "7.保存文件n" );printf( "8.读取和下载文件n" );printf( "9.退出 n" );printf( "););*nn"*MENU*nn);doprintf( "n 输入你的选择项 (09):" ); /* 提示输入选项 */scanf( "%d&

9、quot;,&c); /* 输入选择项 */ while (c<0|c>9);/* 选择项不在9之间重输*/return c; /* 返回选择项,主程序根据该数调用相应的函数*/* 输入函数 */int enter(FLY t)int i,k,n,m,w,j;char *s;printf( "输入航线总数(n<=40):" ); /* 输入航线总数*/scanf( "%d",&n);while (n>40|n<0)printf( "输入错误 ! 再次输入 (0<n<=40):"

10、 ); /* 输入航线总数*/scanf( "%d",&n);printf(输入航班的信息 nn" ); /* 提示信息 */printf( "航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位价格 折扣 n" );printf( "n");for (i=0;i<n;i+)scanf("%s",ti.planenumber);/* 输入姓名 */scanf("%s",ti.Take_off_city);/* 输入起飞城市*/scanf("%s",

11、ti.Arrived_in_city);/* 输入降落城市scanf("%s",ti.takeoff_time);/* 输入起飞时间 */scanf("%s",ti.Landing_time);/* 输入降落时间 */scanf("%d",&ti.shipping);/* 输入舱位数*/scanf("%s",ti.price);/* 输入票价*/scanf("%s",ti.discount);/* 输入折扣 */*/printf(II);n"for (i=0;i<n;i+

12、)ti.sit=0;return n; /* 返回记录条数*/* 显示记录,参数为记录数组和记录条数*/void list(FLY t, int n)int i;价格 折printf( "航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位 扣 n" );printf( "n");for (i=0;i<n;i+)printf( "%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeo

13、ff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);printf(*end*n);/* 按航班号查找记录 */ void search1(FLY t, int n)char s20;/* 保存待查找航班名字符串 */int i;printf( "输入你想查找的航班名 :" );scanf( "%s",s);/* 输入待查找航班名 */for (i=0;i<n;i+)/* 从第一条记录开始,直到最后一条*/* 记录中的航班名和待比较的是否if (strcmp(s,ti.planenumb

14、er)=0)相等 */break ;/* 相等,则返回该记录的下标号,程序提前结结束*/if (i>n-1)/* 如果整数 i 值大于 n-1 ,说明没找到 */printf( "没有找到 n" );else价格printf( "航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位折扣 n" ); /* 显示记录 */printf( "n");printf( "%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,t

15、i.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);/* 按起降城市查找记录 */ void search2(FLY t, int n)char s120;char s220;int i;printf("输入起飞城市名称:" );scanf("%s",s1);/* 输入起飞城市名*/printf("输入降落城市名称:" );scanf("%s",s2);/* 输入降落城市名*/for (i=0;i&l

16、t;n;i+)/* 从第一条记录开始,直到最后一条*/if (strcmp(s1,ti.Take_off_city)=0)&&(strcmp(s2,ti.Arrived_in_city)=0)/* 记录中的城市和待比较的是否相等*/if (i>n-1)/* 如果整数 i 值大于 n-1 ,说明没找到 */printf( "没有找到 n" );elseprintf( "航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位价格折扣 n" ); /* 找到,显示记录*/printf( "n");printf( &q

17、uot;%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);订票 */void book(FLY t, int n)char s20,number110,name110,id120,flightname110;int i,j=0,m,k,count1;printf( "输入你想预订的票数:" );scanf

18、( "%d",&m);printf( "号码 姓名 证件号订的票数航班号 n" ); /*提示信息 */printf( "n");for (k=0;k<m;k+)scanf("%s",number1);scanf( "%s",name1); /* 输入订票客户姓名 */scanf("%s",id1); /* 输入证件号*/scanf( "%s",flightname1); /* 输入航班号*/for (i=0;i<n;i+)/* 从第一

19、条记录开始,直到最后一条*/if (strcmp(flightname1,ti.planenumber)=0)/* 记录中的航班名和待*/j=ti.sit;strcpy(ti.guestj.number,number1);strcpy(,name1);strcpy(ti.guestj.id,id1);ti.guestj.count=count1;strcpy(ti.guestj.flightname,flightname1);ti.shipping=ti.shipping-count1;ti.sit+;break ;/* 相等,则返回该记录的下标号,程序提前结结束*

20、/if (i>n-1)/* 如果整数 i 值大于 n-1 ,说明没找到 */printf( "对不起!没有此航班n" );m=m+2;k+;/* 退票 */void quit(FLY t, int n)*/char s120,s220;/* 保存待查找航班名和证件号字符串int i,k,j,h,l,ch;printf( "请输入你想退订的航班号:" );printf( "请输入你的证件号:" );scanf( "%s",s2); /* 输入待查找证件号*/printf( "号码 姓名 证件号订的票数

21、航班号 n" ); /* 显示提示 */printf( "n");for (i=0;i<n;i+)/* 从第一条记录开始,直到最后一条*/for (j=0;j<ti.sit;j+)if (strcmp(s1,ti.guestj.flightname)=0)&&(strcmp(s2,ti.guestj.id)=0)printf( "%-11s%-16s%-16s%-14d%-10sn" ,ti.guestj.number,,ti.guestj.id,ti.guestj.count,ti.gu

22、estj.flightname);ti.shipping=ti.shipping+ti.guestj.count;l=j;h=i;break ;i=h;if (i>n-1)/* 如果整数 i 值大于 n-1 ,说明没找到 */printf( "没有找到 n" );elseprintf( "你是否确认删除(1/0)n" );/* 确认是否要删除*/scanf( "%d",&ch);/* 输入一个整数或*/if (ch=1)/* 如果确认删除整数为 */for (k=l+1;k<ti.sit;k+)/* 将后一条记录s

23、trcpy(ti.guestk-1.number,ti.guestk.number);的姓名拷贝到前一条*/strcpy(,);strcpy(ti.guestk-1.id,ti.guestk.id);ti.guestk-1.count=ti.guestk.count;strcpy(ti.guestk-1.flightname,ti.guestk.flightname);ti.sit-;printf( "退票成功 !n" ); /* 提示退票成功 */* 修改航班信息 */void channge(FLY t, in

24、t n)int i,j;printf( "请输入你要修改的航班号:" ); /* 提示信息 */scanf( "%s",s); /* 输入航班名 */for (i=0;i<n;i+)/* 从第一条记录开始,直到最后一条*/if (strcmp(s,ti.planenumber)=0) /* 记录中的航班名和待比较的是否相等 */break ;/* 相等,则返回该记录的下标号,程序提前结结束*/if (i>n-1)/* 如果整数 i 值大于 n-1 ,说明没找到 */printf( "没有找到 n" );elseprintf

25、( "航班号起飞城市 降落城市 出发时间 降落时间 剩下的座位价格折扣 n" ); /* 找到,显示原先记录*/printf(II);n"printf( "%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);printf( "please input the new infor

26、mation:n");scanf( "%s",ti.planenumber); /* 输入航班名 */scanf( "%s",ti.Take_off_city); /* 输入起始城市*/scanf( "%s",ti.Arrived_in_city); /* 输入终点城市*/scanf("%s",ti.takeoff_time);/* 输入起飞时间*/scanf("%s",ti.Landing_time);/* 输入降落时间*/scanf( "%d",ti.shipp

27、ing); /* 输入座位号*/scanf( "%s",ti.price);/* 输入票价 */scanf( "%s",ti.discount); /* 输入折扣 */void save(FLY t, int n)int i,j;FILE *fp; /* 指向文件的指针 */if (fp=fopen( "record1.txt" , "wb" )=NULL) /* 打开文件, 并判断打开是否正常*/printf( "can not open filen" ); /* 没打开 */exit(1);

28、 /* 退出 */printf( "n 保存文件 n" ); /* 输出提示信息 */fprintf(fp, "%d",n);/* 将记录数写入文件*/fprintf(fp, "rn" );/* 将换行符号写入文件*/for (i=0;i<n;i+)/* 保存资料 */fprintf(fp,"%s %s %s %s %s %d %s %s",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti

29、.shipping,ti.price,ti.discount);fprintf(fp,"rn");/* 将换行符号写入文件*/fprintf(fp, "%d",ti.sit);/* 将记录数写入文件 */fprintf(fp,"rn");/* 将换行符号写入文件*/for (j=0;j<ti.sit;j+)fprintf(fp,"%s %s %s %d %s" ,ti.guestj.number,ti.guestj/*.name,ti.guestj.id,ti.guestj.count,ti.guestj.f

30、lightname);格式写入记录*/fprintf(fp, "rn" ); /* 将换行符号写入文件*/fclose(fp); /* 关闭文件 */printf( "* 恭喜!保存成功 *n" ); /* 显示保存成功 */* 读入函数,参数为结构体数组*/ int load(FLY t)int i,n,j;FILE *fp; /* 指向文件的指针 */if (fp=fopen( "record1.txt" , "rb" )=NULL) /* 打开文件 */printf( "不能打开 n" )

31、;/* 不能打开 */exit(1); /* 退出*/fscanf(fp,"%d",&n); /* 读入记录数*/for (i=0;i<n;i+)fscanf(fp, "%s %s %s %s %s %d %s %s",ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,&ti.shipping,ti.price,ti.discount);/* 读入记录数*/fscanf(fp, "%d",&

32、ti.sit);for (j=0;j<ti.sit;j+) fscanf(fp, "%s %s %s %d %s" ,ti.guestj.number,,ti.guestj.id,&ti.guestj.count,ti.guestj.flightname);/*按格式读入记录*/fclose(fp); /* 关闭文件 */printf( "你已经成功从文件读取数据!nnnn"); /* 显示读取成功 */return n; /* 返回记录数*/* 主函数 */main() int i;FLY flightQ;in

33、t length; /* 保存记录长度*/for (;) /* 无限循环 */switch (menu_select()/* 调用主菜单函数,返回值整数作开关语句的条件*/case 0:length=enter(flight);case 1:list(flight,length);case 2:search1(flight,length);case 3:search2(flight,length);case 4:book(flight,length);case 5:quit(flight,length);case 6:channge(flight,length);break ; /* 输入记录

34、 */break ; /* 显示全部记录 */break ; /* 查找记录 */break ; /* 查找记录 */break ;/* 订票*/break ;/* 退票*/break ;/* 修改航班信息*/case 7:save(flight,length); break ;/* 保存文件 */case 8:length=load(flight); break ;/* 读文件 */case 9:exit(0);/* 如返回值为则程序结束*/4.系统运行时窗口截图:(VC6.0下的运行结果)门 *C - XDacua9nt e Bid S«ttinc&XAdBinisIrr

35、at vzWBBbugbaokt ickat - oxe嗨入你的选隼入觥型总数< =物2输入凯班的信息7 8 9VW入出ElE改存恐I 兽技长TJ退修保读退f0 J4 2 3 4 5Ifc leone 七口Tickets Boolkingr Svsten*斌*.杷.letKNMENU M里=3clit 算AMXKM KM AM班 信的件 询评 班文 能杳查 航载 班哲!r卡序统4K 航HS飞文和:班号起飞城市 降落城市 出发时间 降落时间 剩下的座位 价格 折扣23,推合肥 101 ©0 1 矶 46 500 809 0.924 南京 北京 8: S0 ? 50 S03 130

36、0 0.75按任意键返回主菜单2 .按航班号查询航输入你的迭援项(叱X 2总想登找的航班引起飞城市降落城市出发时间降落时间剩下两座位价格折扣K意键返回其单合肥班信息QPinyin工也飞城市降落城市出发时间降落时间剩下的座栉价格折扣票系统菜单窗口0.输入航班的信息I 1.列I出航I班的I信息18- 488008.83 .按城市来查123上海合肥 10t 064H 500800 叽8按仕爸键返回王案单询航班4.订票程序5.退的喻A你的先择:加 领X你即退的轻班号:124 输入你的证件下; 34242319gg邺L221叮姓名正伤号村的票数肮班号心 关宏新你是否旃让删除显票皮耳” 史任意感次回主菜单

37、修改飞机航班的信34Z1Z317B?081221?1Z票系统6.航近弓起飞城市降落城而出发叶间降落叶河剩下的座位价稔折共上海合肥lft:阿HAH A.flplease in put the neu inFornacian:125 上梅 合肥 ?: 46 10: 05 45口 750 0.?7 .保存文件8 .读取文件、下载文件的遍历过输入你的选择项工丁号九7 保存至作,Q= 44.输入的 保已经成功次的选样项:从文隹实取数据,”程演一. 需求分析:设计程序完成如下功能:对给定的图的结构和起点,产生深度优先遍历和广度优先遍历,并列出求解的过程动态演示。主要设计思路:设计思想:简而言之,深度优先,

38、就是先遍历它的一个邻接点,这个邻接点的邻接点然后才遍历其他的邻接点。广度优先,就是先把它所有的邻接点都遍历完以后,再遍历它每个邻接点的邻接点 。存储结构为图的邻接多重表,它是无向图的一种链式存储结构。深度优先遍历:设x 是当前被访问顶点,在对x 做过访问标记后,选择一条从x 出发的未检测过的边(x , y) 。若发现顶点 y 已访问过,则重新选择另一条从x 出发的未检测过的边,否则沿边(x, y)到达未曾访问过的y,对y访问并将其标记为已访问过;然后从y 开始搜索,直到搜索完从y 出发的所有路径,即访问完所有从y 出发可达的顶点之后,才回溯到顶点 x ,并且再选择一条从x 出发的未检测过的边。

39、上述过程直至从x 出发的所有边都已检测过为止。此时,若x 不是源点,则回溯到在 x 之前被访问过的顶点; 否则图中所有和源点有路径相通的顶点 ( 即从源点可达的所有顶点)都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新源点,进行新的搜索过程。广度优先遍历:设x 和 y 是两个相继要被访问的未访问过的顶点。它们的邻接点分别记为x1, x2,,xs和y1, y2,,yt。为确保先访问的顶点其邻接点亦先被访问,在搜索过程中使用队列来保存已访问过的顶点。当访问 x 和 y 时,这两个顶点相继入队。此后,当 x 和 y 相继出队时,我们分别从x和y出发搜索其邻接点x1

40、, x2,,xs和y1, y2,,yt ,对其中未访者进行访问并将其入队。这种方法是将每个已访问的顶点入队,故保证了每个顶点至多只有一次入队。A. 图的算法构造思想:1. CreateALGraph()初始条件 :V 是图的顶点集,VR 是图中弧的集合.操作结果:按V和VR是定义构造图G.2. DestroyGraph(&G)初始条件:图G存在操作结果 : 销毁图 G3. LocateVex(G,u)初始条件:图G存在,u和G中顶点有相同的特征; 否则返回其他操作名果:若图G中存在顶点u,则返回该顶点在图中的位置信息4. GetVex(G,v)初始条件:图G存在,v是G中顶点操作结果

41、: 返回 v 的值5. FirstAjvex(G,v)初始条件:图G存在,v是G中顶点操作结果 : 返回 v 的第一个邻接顶点 , 若顶在图中没有邻接顶点 , 则返回为空6. NextAjvex(G,v,w)初始条件:图G存在,v是G中顶点,w是v的邻接顶点操作结果 : 返回 v 的下一个邻接顶点 , 若 w 是 v 的最后一个邻接顶点 , 则返回空7. DeleteVexx(&G,v)初始条件:图G存在,v是G中顶点操作结果 : 删除顶点 v 已经其相关的弧8. DFStraverse(ALGraph)初始条件:图G存在,visit的顶点的应用函数操作结果 : 对图进行深度优先遍历,

42、 在遍历过程中对每个结点调用visit 函数一次 , 一旦 visit 失败 , 则操作失败9. BFStraverse(ALGraph)初始条件:图G存在,visit的顶点的应用函数操作结果 : 对图进行广度优先遍历 , 在遍历过程中对每个结点调用 visit函数一次 , 一旦 visit 失败 , 则操作失败附图的结构体构造:ALGraph数据对象V:V 是具有相同特性的数据元素的集合, 称为点集 .数据关系R:R=VRVR=(v,w)|v,w 属于V,(v,w)表示v和w之间存在的路径B.队列的算法构造:1. Init_SeqQueue()操作结果 : 构造一个空队列 Q2. Destr

43、yoQueue(&Q)初始条件:队列 Q 已存在。操作结果:队列Q被销毁,不再存在。3. In_SeqQueue()初始条件:队列Q已经存在操作结果:插入元素e为Q的新的队尾元素4. Out_SeqQueue()初始条件 :Q 为非空队列 操作结果:删除Q的队尾元素,并用e返回其值5. Empty_SeqQueue()初始条件 : 队列已经存在操作结果:若队列为空,则返回TRUE,否则返回FLASEC.本程序包含的模板:1. 程序模块Main()取得顶点数和弧数;生成邻接表结构的图;深度遍历图;广度遍历图;2造邻接表结构的图; 3度优先遍历图;4度优先遍历图;5列的基本操作模块;6数声

44、明模块;三 . 源程序代码: (VC+6.0 下运行 )#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_VERTEX_NUM 5/0/ 图的最大顶点数#define MAXQSIZE 200 / 队列的最大容量 enumBOOL False,True; / 定义枚举变量typedef struct ArcNode / 图的邻接表存储 int adjvex; / 该弧所指向的顶点的位置struct ArcNode *nextarc; / 指向下一条弧的指针ArcNode;

45、/ 弧结点typedef struct ArcNode* AdjListMAX_VERTEX_NUM; / 指向第一条依附该顶点的弧的指针int vexnum,arcnum; / 图的当前顶点和弧数Graph;typedef struct / 队列结构 int elemMAXQSIZE; / 数据域int front; / 队头指针int rear; / 队尾指针SqQueue;BOOL visitedMAX_VERTEX_NUM; / 全局变量访问标志数组void CreateGraph(Graph &);/ 生成图的邻接表void DFSTraverse(Graph); / 深度优

46、先搜索遍历图void DFS(Graph, int );void BFSTraverse(Graph);/ 广度优先搜索遍历图void Initial(SqQueue &);/ 初始化一个队列BOOL QueueEmpty(SqQueue); / 判断队列是否空BOOL EnQueue(SqQueue &i,nt ); / 将一个元素入队列BOOL DeQueue(SqQueue &i,nt &); / 将一个元素出队列 int FirstAdjVex(Graph, int ); / 求图中某一顶点的第一个邻接顶点int NextAdjVex(Graph, in

47、t , int ); / 求某一顶点的下一个邻接顶点int main()Graph G; / 采用邻接表结构的图char j= 'y' ;printf( " 题目 : 编制一个“图遍历的演示”的程序 .n" );/ 程序解说 printf( "n 本程序将演示生成一个图,并对它进行遍历.n" );printf( " 输入图的顶点数和弧数:n 格式:顶点数,弧数;例如 :5,4n" );printf( "接着输入各边(弧尾,弧头):n 例如 :5,3n3,1n1,2n2,4n" );printf( &

48、quot; 程序会生成一个图,并对它进行深度和广度遍历 .n" );printf( " 深度遍历 :1->2->4->3->5n 广度遍历 :1->2->3->4->5n");/while (j!= 'N' &&j!= 'n' )printf( "n 请输入顶点数和弧数: ");scanf( "%d,%d",&G.vexnum,&G.arcnum); / 输入图的顶点数和弧数CreateGraph(G); / 生成

49、邻接表结构的图DFSTraverse(G); / 深度优先搜索遍历图BFSTraverse(G); / 广度优先搜索遍历图printf( " 图遍历完毕,继续进行吗?(Y/N)" );scanf( " %c" ,&j);void CreateGraph(Graph &G)/ 构造邻接表结构的图 Gint i;int start,end;ArcNode *s;for (i=1;i<=G.vexnum;i+) G.AdjListi=NULL;/ 初始化指针数组for (i=1;i<=G.arcnum;i+)scanf( "

50、;%d,%d",&start,&end);/ 输入弧的起点和终点s=(ArcNode *)malloc( sizeof (ArcNode); / 生成一个弧结点 s->nextarc=G.AdjListstart; / 插入到邻接表中 s->adjvex=end;G.AdjListstart=s;s=(ArcNode *)malloc( sizeof (ArcNode);s->nextarc=G.AdjListend;s->adjvex=start;G.AdjListend=s;void DFSTraverse(Graph G)/ 深度优先遍历图 G int i;printf( " 深度优先遍历 :" );/ 访问标志数组初始化for (i=1;i<=G.vexnum;i+) visitedi=False;for (i=1;i<=G.vexnum;i+)if (!visitedi) DFS(G,i);/ 对尚未访问的顶点调用 DFSprintf( "bb n");void DFS(Graph G, int i)/ 从第 i 个顶点出发递归地深度遍历图 Gint w;visitedi=True; / 访问第 i 个顶点p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论