PAT 1094. The Largest Generation

用邻接表存储图,然后BFS

70~78这几行的代码必须放在while(rear!=front)这个循环的尾端,防止最大代位于末端时而由于front=rear已成立而跳出循环从而没有更新


#include <stdio.h>

#include <stdlib.h>

#define max 100

typedef struct ArcNode{

struct ArcNode *next;

int adjvex;

}arcnode;

typedef struct VNode{

arcnode *firstarc;

}vnode;

typedef struct GraphNode{

int n,e;

vnode adjlist[max];

}AGraph;

void BFS(int x,AGraph *G,int *level,int*Max);

int main() {

int N,M;

int parent,count,child;

int level=1,Max=1;

scanf("%d %d",&N,&M);

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

G->n=0;

for(int i=1;i<=N;i++)

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

for(int i=0;i<M;i++){

scanf("%d %d",&parent,&count);

for(int j=0;j<count;j++){

scanf("%d",&child);

arcnode *s=(arcnode*)malloc(sizeof(arcnode));

s->adjvex=child;

s->next=G->adjlist[parent].firstarc;

G->adjlist[parent].firstarc=s;

}

}

BFS(1,G,&level,&Max);

printf("%d %d",Max,level);

free(G);

return 0;

}

void BFS(int x,AGraph *G,int *level,int*Max){

arcnode *p;

int queue[max],rear,front,visited[max]={0},q,current_num=0,Level=1;

int level_num=1,next_num=0;

rear=front=0;

queue[rear]=x;

rear=(rear+1)%max;

visited[x]=1;

while(rear!=front){

q=queue[front];

front=(front+1)%max;

current_num++;

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

while(p!=NULL){

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

next_num++;

visited[p->adjvex]=1;

queue[rear]=p->adjvex;

rear=(rear+1)%max;

}

p=p->next;

}

if(current_num==level_num){

if(level_num>*Max){

*Max=level_num;

(*level)=Level;

}

level_num=next_num;

next_num=current_num=0;

Level++;

}

}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值