广度优先遍历

news/2024/11/20 21:35:45/

#include<bits/stdc++.h>

#define MAXV 5 //用另一个数组的时候改成5 

#define INF 32767 //定义无穷 

#define MaxSize 50

typedef int ElemType;

typedef char InfoType;

//环形队列 

typedef struct

{

    ElemType data[MaxSize];

    int front,rear;

}SqQueue;

typedef struct ANode

{

 int adjvex;

 struct ANode *nextarc;

 int weight;

}ArcNode;

typedef struct Vnode

{

 InfoType info;

 ArcNode *firstarc;

}VNode;

typedef struct

{

 Vnode adjlist[MAXV];

 int n,e;

}AdjGraph;

void Create(AdjGraph *&G,int A[MAXV][MAXV],int n,int e)

{

 int i,j;

 ArcNode *p;

 G=(AdjGraph *)malloc(sizeof(AdjGraph)); 

 for(i=0;i<n;i++)

 {

  G->adjlist[i].firstarc=NULL; 

 }

 for(i=0;i<n;i++)

 {

  for(j=n-1;j>=0;j--)

  {

   if(A[i][j]!=0 && A[i][j]!=INF)

   {

    p=(ArcNode *)malloc(sizeof(ArcNode));

    p->adjvex=j;

    p->weight=A[i][j];

    p->nextarc=G->adjlist[i].firstarc;

    G->adjlist[i].firstarc=p;

   }

  } 

 }

 G->n=n;

 G->e=e;

}

 

void DispAdj(AdjGraph *G)

 

{

 int i;

 ArcNode *p;

 for(i=0;i<G->n;i++)

 {

  p=G->adjlist[i].firstarc;

  printf("%3d:",i);

  while(p!=NULL)

  {

   printf("%3d[%d]->",p->adjvex,p->weight);

   p=p->nextarc;

  }

  printf("\n");

 }

}

//初始化队列 

void InitQueue(SqQueue *&q)

{

    q=(SqQueue *)malloc(sizeof(SqQueue));

    q->front=q->rear=0;

}

//销毁队列 

void DestoryQueue(SqQueue *&q)

{

    free(q);

}

//判断队列是否为空 

bool QueueEmpty(SqQueue *q)

{

    return(q->front==q->rear);

}

//入队 

bool enQueue(SqQueue *&q,ElemType e)

{

    if((q->rear+1)%MaxSize==q->front)

    {

        return false;

    }

    q->rear=(q->rear+1)%MaxSize;

    q->data[q->rear]=e;

    return true;

}

//出队 

bool deQueue(SqQueue *&q,ElemType &e)

{

    if(q->front==q->rear)

    {

        return false;

    }

    q->front=(q->front+1)%MaxSize;

    e=q->data[q->front];

    return true;

}

//广度优先遍历 

void BFS(AdjGraph *G,int v)

{

 int w,i;

 ArcNode *p;

 SqQueue *qu;

 InitQueue(qu);

 int visited[MAXV];

 for(int i=0;i<G->n;i++) visited[i]=0;

 printf("%2d",v);

 visited[v]=1;

 enQueue(qu,v);

 while(!QueueEmpty(qu))

 {

  deQueue(qu,w);

  p=G->adjlist[w].firstarc;

  while(p!=NULL)

  {

   if(visited[p->adjvex]==0)

   {

    printf("%2d",p->adjvex);

    visited[p->adjvex]=1;

    enQueue(qu,p->adjvex);

   }

   p=p->nextarc;

  } 

 }

 printf("\n");

}

int main()

{

 AdjGraph *G;

 int A[MAXV][MAXV]={

   {0,8,32767,5,32767},

   {32767,0,3,32767,32767},

   {32767,32767,0,32767,6},

   {32767,32767,9,0,32767},

   {32767,32767,32767,32767,0}};

 /*int A[MAXV][MAXV]={{0,1,1,1,0,0},

                    {1,0,0,0,1,0},

     {1,0,0,0,1,0},

     {1,0,0,0,0,1},

     {0,1,1,0,0,0},

     {0,0,0,1,0,0}};*/ 

  int n=5,e=5; //n和e也要改成6 

  Create(G,A,n,e);//创建 

  DispAdj(G);//打印邻接表 

  BFS(G,0);

  return 0;

}


http://www.ppmy.cn/news/81981.html

相关文章

基于云计算和物联网技术开发的智慧校园云平台源码

智慧校园系统是利用物联网和云计算&#xff0c;强调对教学、科研、校园生活和管理的数据采集、智能处理、为管理者和各个角色按需提供智能化的数据分析、教学、学习的智能化服务环境。它包含“智慧环境、智慧学习、智慧服务、智慧管理”等层面的内容。 文末获取联系 它描绘的是…

如何优化供应商采购系统,提升供应商管理和采购流程效能

随着企业采购向数字化转型的发展&#xff0c;供应商采购系统的使用也越来越广泛。如何优化供应商采购系统&#xff0c;提升供应商管理和采购流程效能&#xff0c;已成为企业面临的重要问题。本文将为大家介绍一些优化供应商采购系统的方法&#xff0c;以提升采购效率和管理水平…

基于Java+Springmvc+vue+element实现大学生科技创新创业项目管理系统

基于JavaSpringmvcvueelement实现大学生科技创新创业项目管理系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

KDHL-200A高压开关电阻测量仪技术参数

一、产品概述 KDHL-200A高压开关电阻测量仪操作面板采用人体工学设计&#xff0c;符合操作习惯&#xff0c;采用高频开关电源和数字电路技术&#xff0c;适用于开关控制设备回路电阻的测量。 测试电流采用国家标准推荐的直流100A&#xff0c;可在直流100A的情况下直接测得回路…

分布式ID解决方案对比

在复杂的分布式系统中&#xff0c;往往需要对大量的数据进行唯一标识&#xff0c;比如在对一个订单表进行了分库分表操作&#xff0c;这时候数据库的自增ID显然不能作为某个订单的唯一标识。除此之外还有其他分布式场景对分布式ID的一些要求&#xff1a; 趋势递增&#xff1a; …

MATLAB | 如何使用MATLAB绘制高度自定义的桑基图(sankey)

我之前也出过一个超简单的桑基图绘制函数&#xff0c;但是无法应对很多特殊情况&#xff0c;在这里我将其重构了一些写成了类&#xff0c;加了很多内置修饰函数&#xff0c;实现了流入流出数据不相等或者跨层数据流动的特殊情况绘制&#xff0c;首先展示一下使用我编写的函数能…

Linux下的用户分类与su/sudo 命令,Linux下的文件类型/用户文件权限身份/文件权限属性/权限与文件权限/ls-l文件属性详解

Tips 下载就是把我们的文件拷贝到系统的某个特定路径之下&#xff0c;普通用户是不允许你往系统里面去拷的。 Linux下的用户分类 root用户&#xff0c;管理员级别的用户身份&#xff0c;他的话基本上不受权限的约束。普通用户&#xff0c;普通用户的添加与每个普通用户密码的…

微信小程序富文本组件mp-html

功能介绍 支持在多个主流的小程序平台和 uni-app 中使用支持丰富的标签&#xff08;包括 table、video、svg 等&#xff09;支持丰富的事件效果&#xff08;自动预览图片、链接处理等&#xff09;支持设置占位图&#xff08;加载中、出错时、预览时&#xff09;支持锚点跳转、…