#include<stdio.h>
#include<stdlib.h>
#define N 10
int visit[N];
typedef struct
{
int elem[N];
int front;
int rear;
}Seqqueue;
void initSeq(Seqqueue *Q)
{
Q->front=Q->rear=0;
}
int EnterQ(Seqqueue *Q,int x)
{
if((Q->rear+1)%N==Q->front)
return -1;
Q->elem[Q->rear]=x;
Q->rear=(Q->rear+1)%N;
return 1;
}int DeleteQ(Seqqueue *Q,int *x)
{
if(Q->front==Q->rear)
return -1;
*x=Q->elem[Q->front];
Q->front=(Q->front+1)%N;
return 1;
}
int Is_empty(Seqqueue *Q)
{
if(Q->front==Q->rear)
return 1;
else
return 0;
}
typedef struct node{
int ver;
struct node*next;
}VexNode;
struct Adj{
VexNode *next;
};
void CreatMap(Adj adj[],int numB)
{
for(int i=0;i<numB;i++){
int a,b;
scanf("%d%d",&a,&b);
VexNode*q;
q=(VexNode*)malloc(sizeof(VexNode));
q->ver=b;
q->next=adj[a].next;
adj[a].next=q;
VexNode*q1;
q1=(VexNode*)malloc(sizeof(VexNode));
q1->ver=a;
q1->next=adj[b].next;
adj[b].next=q1;
}
}
void InitMap(Adj adj[],int numN)
{
for(int i=1;i<=numN;i++)
adj[i].next=NULL;
}
void broad(Adj adj[],int start)
{
Seqqueue*Q;
Q=(Seqqueue*)malloc(sizeof(Seqqueue));
initSeq(Q);
visit[start]=1;
printf("%d",start);
EnterQ(Q,start);
while(!Is_empty(Q))
{
int cur;
DeleteQ(Q,&cur);
VexNode* p=adj[cur].next;
while(p!=NULL)
{
int v=p->ver;
if(!visit[v])
{
visit[v]=1;
printf("%d",v);
EnterQ(Q,v);
}
p=p->next;
}
}
}
int main()
{
Adj adj[N];
int numN,numB;
scanf("%d%d",&numN,&numB);
InitMap(adj,numN);
CreatMap(adj,numB);
broad(adj,1);
return 1;
}
广度优先遍历
最新推荐文章于 2023-05-10 00:05:44 发布