图的广度遍历(湖北汽车工业学院数据结构实验)

#include<stdio.h>#include <stdlib.h>#define vertexnum 100       //定义最大可输入的结点个数#define QueueMax  100typedef struct  node        //定义图形的顶点结构{   int  vertex;             //图中的顶点信息为数字   struct  node  *next;}Graph;Graph head[vertexnum];      //邻接表的表头结点int Visited[vertexnum];     //遍历记录int Front=-1;int Rear=-1;int Queue[QueueMax];int Enqueue(int Vertex)       //元素入队{    if (Rear>=QueueMax)       //队列已满        return -1;    else    {        Rear  ;               //队列尾端指针后移        Queue[Rear]=Vertex;   //将值存入队列中        return 1;    }}int Dequeue()                //元素出队{    if (Front>=Rear)          //队列已空        return -1;    else    {        Front  ;              //队头指针后移        return Queue[Front];    }}void BFS(int Vertex)//广度优先搜索{int i;Graph  *searchP;searchP=&(head[Vertex]);    printf("%d  ",searchP->vertex);Visited[Vertex]=1;Enqueue(searchP->vertex); while(i!=-1)    {   i=Dequeue();   searchP=&(head[i]);    while(searchP!=NULL){           if(Visited[searchP->vertex]!=1)   {   if(searchP->vertex==0) ;   else printf("%d   ",searchP->vertex);             Visited[searchP->vertex]=1;             Enqueue(searchP->vertex);   }           searchP=searchP->next;}     }}void Create_l_Graph(int Vertex1,int Vertex2,int no){                      //以邻接链表建立图形  Graph  *searchP;     //结点声明  Graph  *New;         //新结点声明  New=(Graph *)malloc(sizeof(struct node));  if (New!= NULL )  {    New->vertex=Vertex2;    New->next=NULL;    searchP=&(head[Vertex1]);    while(searchP->next!=NULL)       searchP=searchP->next;    searchP->next =New;if(no==0){New=(Graph *)malloc(sizeof(struct node));New->vertex=Vertex1;        New->next=NULL;        searchP=&(head[Vertex2]);        while(searchP->next!=NULL)           searchP=searchP->next;        searchP->next =New;    }  }}void showmenu(){                   //显示菜单printf("    欢迎使用图的操作演示软件\n");printf("\t1、创建图的邻接表\n");printf("\t2、图的输出\n");printf("\t3、图的广度优先遍历\n");printf("\t4、退出程序\n");}void print_l_graph(Graph *head){                     //输出邻接链表的数据    Graph  *searchP;    searchP=head->next;    while(searchP!=NULL)    {      printf("[%d]",searchP->vertex);      searchP=searchP->next;     }    printf("\n");}void main(){   int source;           //图中一条边的起始顶点   int destination;      //图中一条边的终止顶点   int i,j;   int vermax;           //定义图中最大的顶点数   int edgemax;          //定义图中最大的边数   int choice;   int no;   while(1){showmenu();printf("   请输入你的选择:");scanf("%d",&choice);fflush(stdin);//清除键盘缓冲区switch(choice){          case 1:printf("请输入图的类别(有向图-1,无向图-0):");     scanf("%d",&no);     printf("请输入图中的总顶点数和边数:");                 scanf("%d%d",&vermax,&edgemax);     for(i=1;i<vermax;i  ){head[i].vertex = i;head[i].next = NULL;}for(i=1;i<=edgemax;i  ){printf("请输入第%d条边的起点:",i);scanf("%d",&source);printf("请输入第%d条边的终点:",i);scanf("%d",&destination);if(source==destination)      printf("输入有误!\n");//出错:自身循环        else                 //调用建立邻接链表                        Create_l_Graph(source,destination,no);}     printf("图创建成功,按任意键继续…\n"); getch(); system("cls"); break;  case 2:printf("图的邻接表如下:\n");  for(i=1;i<=vermax;i  ){printf("顶点[%d]:",i);print_l_graph(&head[i]);//调用输出邻接链表数据} printf("\n"); system("pause"); system("cls"); break;  case 3:for(i=1;i<=vermax;i  )                     Visited[i]=0;     printf("请输入遍历的起点:"); scanf("%d",&source);     printf("图的广度优先遍历结果为:\n");     BFS(source); printf("END\n"); system("pause"); system("cls"); break;  case 4:return;  default:     printf("你的输入有误,请从新输入!\n"); system("pause"); system("cls");}}   }

来源:https://www.icode9.com/content-4-808501.html

(0)

相关推荐

  • 湖北十堰、襄阳先后筹办湖北交通大学,交通大学为什么这么香?

    2014年,十堰计划合并湖北汽车工业学院和郧阳师专,筹备成立"湖北交通大学".湖北的航空,铁路,轨道交通,汽车都在大发展,水运也随着长江经济带的开发越来越好,需要交通类大学. 20 ...

  • PHP数据结构-图的遍历:深度优先与广度优先

    图的遍历:深度优先与广度优先 在上一篇文章中,我们学习完了图的相关的存储结构,也就是 邻接矩阵 和 邻接表 .它们分别就代表了最典型的 顺序存储 和 链式存储 两种类型.既然数据结构有了,那么我们接下 ...

  • 32学时数据结构课程的教与学(含教学大纲)

    <数据结构>课程教学大纲课程代码:********.课程负责人:********.课程中文名称: 数据结构.课程英文名称:Data Structures.课程类别:专业基础课 必修.课程学 ...

  • Python | 手绘图说DFS与BFS

    引言 深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式. 本次以图解的形式来对图的 ...

  • 襄阳那些最赚钱的10家大型工业企业排行榜,你会选择哪一个?

    襄阳市市经信委指导.市企业联合会.企业家协会以企业主营业务收入.纳税总额为排序指标经职能部门和专家审查,排出襄阳工业企业十强: 湖北中烟工业有限公司襄阳卷烟厂 襄樊烟厂曾经风靡大街的金蝶烟 风神襄阳汽 ...

  • 漳州卫生职业学院函授大专

    忽然之间,觉得年华已逝,再回首,都是感慨:"我过去这些年都做什么了?彷佛再也没有了改变一切的勇气." 如果自己不能主动出击去改变,那这就是你的宿命,因此而留存遗憾,那才是不可逆的. ...

  • 2021校友会中国政法类高职院校排名揭晓,河北政法职业学院第一

    哪些高职院校跻身2021校友会中国政法类高职院校排名10强?哪些政法类高职院校跻身2021中国顶尖高职院校(6★)和中国一流高职院校(5★)行列? 2021年3月,全国第三方大学评价机构艾瑞深校友会网 ...

  • 2021校友会中国民族类高职院校排名出炉,湖南民族职业学院第一

    哪些高职院校跻身2021校友会中国民族类高职院校排名10强?哪些民族类高职院校跻身2021中国顶尖高职院校(6★)和中国一流高职院校(5★)行列? 2021年3月,全国第三方大学评价机构艾瑞深校友会网 ...

  • 福建警官职业学院被撤,再也不见

    福建警官职业学院前身为福建省警官学校,创办于1985年,1999年评为国家级重点中专,2004年2月,福建省政府批准组建福建警官职业学院. 2010年10月,福建省委省政府调整福建警察学院.福建警官职 ...

  • #老寿读图#第61集雷士德工学院

    老寿读图,听听老寿怎么说? 在上海有很多是曾经教会办的学校.医院,我们现在能够客观的理解早年传教士和教会在传教的过程中给处于封建愚昧的旧中国带来了科学知识的传授. 雷士德工学院(英译:The Lest ...

  • 深化产教融合,山东化工职业学院与山东海化集团共育化工人才

    齐鲁晚报·齐鲁壹点记者 尹明亮 通讯员 尹起浩   李逸凡 7月8日,同处潍坊市滨海经济技术开发区的山东化工职业学院与山东海化集团签署战略合作协议,在签约仪式上,山东化工职业学院实习实训基地.山东海化 ...

  • 西南林业大学、昆明艺术职业学院、建水实验中学汇聚于石林!片区高地即将爆发!

    昆明石林片区发展将迎来一片春天 随着交通.医院.教育.生态等配套不断落地完善 为城市前行注入新的强大动力 写下影响深远的壮丽篇章 百年大计 教育为本 石林将有三所学校入驻,包括两所大学+一所中学. 西 ...

  • 浙江艺术职业学院18越剧(南越班)期末考试掠影

    来源:南京市越剧团 版权归原作者所有,如有侵权请及时联系 梨园新蓓,初绽光彩.2018年南京市越剧团与浙江艺术职业学院合作办班招收了一批小学员.三年过去了,当初懵懂的孩童如今已叩开戏曲艺术的大门,正朝 ...

  • #老寿读图#第111集永业大楼

    老寿读图,看看视频读读图. 这栋楼从早年很多人写的内容都是较为简单的称之为杨氏公寓,甚至于官方的地方志上也是照抄了这一段. 文章的开头基本上都是:永业大楼位于上海市淮海中路雁荡路西北隅,淮海中路481 ...