当前位置:编程学习 > C#/ASP.NET >>

图的广度遍历


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int visited[10];/*访问标志数组*/
typedef struct ArcCell{
 int adj;/*顶点关系类型,用1表示相邻,0表示不相邻*/
}ArcCell,**AdjMatrix;/*邻接矩阵*/
typedef struct type{ 
 char data[3];/*顶点值*/
 struct type *next;/*顶点的下一个指针*/
}VertexType;
typedef struct{
 VertexType *vexs;/*顶点向量*/
 AdjMatrix arcs;/*邻接矩阵*/
 int vexnum,arcnum;/*图的顶点数和边数*/
}MGraph;
/* ****************************** */
typedef struct QNode{
 int elem;
 struct QNode *next;
}QNode,*QueuePtr;/*队数据类型*/
typedef struct
{ QueuePtr front;/*队头指针*/
  QueuePtr rear;/*队尾指针*/
}LinkQueue;
int InitQueue(LinkQueue *Q)/*初始化队列*/
{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));/*分配空间*/
 if(!Q->front) exit(0);
 (Q->front)->next=NULL;
 return 1;
}
int EnQueue(LinkQueue *Q,int e)/*插在队最后*/
{QueuePtr p;
 p=(QueuePtr)malloc(sizeof(QNode));/*分配空间*/
 if(!p) exit(0);
 p->elem=e;p->next=NULL;
 (Q->rear)->next=p;
 Q->rear=p;/*重新设置队尾*/
 return 1;
}
int QueueEmpty(LinkQueue Q)/*队是否为空*/
{ if(Q.front==Q.rear) return 1;
 else return 0;}
int DelQueue(LinkQueue *Q,int *e)/*删除队的第一个元素*/
{QueuePtr p;
 if(QueueEmpty(*Q)) return 0;
 p=(Q->front)->next;
 *e=p->elem;
 (Q->front)->next=p->next;
 if(Q->rear==p) Q->rear=Q->front;
 free(p);
 return 1;
}
/* ************************ */
void InitGraph(MGraph *G)/*初始图*/
{ int i,nu,mu;
 printf("输入顶点的个数和(边)弧的个数:");
  scanf("%d%d",&nu,&mu);
  G->arcs=(ArcCell **)malloc(nu*sizeof(ArcCell *));
  for(i=0;i<nu;i++)/*分配邻接矩阵空间*/
      G->arcs[i]=(ArcCell *)malloc(nu*sizeof(ArcCell));
  G->vexs=(VertexType *)malloc(nu*sizeof(VertexType));/*分配顶点空间*/
  G->vexnum=nu;G->arcnum=mu;/*图的顶点数和边数*/
}
void InsertGraph(MGraph *G,int i,VertexType e)
{ if(i<0||i>G->vexnum) return;
  G->vexs[i].next=e.next;
  strcpy(G->vexs[i].data,e.data);补充:asp.net教程,C语言
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,