#include<malloc.h>
#include<stdlib.h>
#include<stdio.h>
#define MAX_VERTEX 100
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*Queueptr;
typedef struct
{
Queueptr front;
Queueptr rear;
}LinkQueue;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode
{
int data;
ArcNode *firstarc;
}AdjList[MAX_VERTEX];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
void Init_Queue(LinkQueue *Q)
{
Q->front=(Queueptr)malloc(sizeof(QNode));
if(!Q->front)
exit(0);
Q->rear=Q->front;
Q->front->next=NULL;
}
void EnQueue(LinkQueue *Q,int e)
{
Queueptr q;
q=(Queueptr)malloc(sizeof(QNode));
if(!q)
exit(0);
q->data=e;
q->next=NULL;
Q->rear->next=q;
Q->rear=q;
}
void DeQueue(LinkQueue *Q,int *e)
{
Queueptr p;
if(Q->front!=Q->rear)
{
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
}
}
bool Empty_Queue(LinkQueue Q)
{
return !(Q.front==Q.rear);
}
void DestoryQueue(LinkQueue *Q)
{
while(Q->front)
{
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
}
void create_graph(ALGraph *G,int n,int m)
{
int con1,con2;
int i=0;
ArcNode *arc2;
G->arcnum=n;
for(i=1;i<=n;i++)
{
G->vertices[i].data=i;
G->vertices[i].firstarc=NULL;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&con1,&con2);
arc2=(ArcNode*)malloc(sizeof(ArcNode));
arc2->adjvex=con2;
arc2->nextarc=G->vertices[con1].firstarc;
G->vertices[con1].firstarc=arc2;
arc2=(ArcNode*)malloc(sizeof(ArcNode));
arc2->adjvex=con1;
arc2->nextarc=G->vertices[con2].firstarc;
G->vertices[con2].firstarc=arc2;
}
}
void wide_traveser(ALGraph *G)
{
int i=0,j=0,k=0;
char c='%';
int visit[120];
int count=0,temp=0;
int countfloor=0,countfloor1=0;
ArcNode *p;
LinkQueue Q;
for(i=1;i<=G->arcnum;i++)
{
Init_Queue(&Q);
count=1;
countfloor=0;
for(j=1;j<=G->arcnum;j++)
visit[j]=0;
p=G->vertices[i].firstarc;
visit[i]=1;
while(p)
{
visit[p->adjvex]=1;
count++;
countfloor++;
EnQueue(&Q,p->adjvex);
p=p->nextarc;
}
for(j=2;j<=6;j++)
{
countfloor1=countfloor;
for(k=1,countfloor=0;k<=countfloor1;k++)
{
DeQueue(&Q,&temp);
p=G->vertices[temp].firstarc;
while(p)
{
if(visit[p->adjvex]==0)
{
visit[p->adjvex]=1;
EnQueue(&Q,p->adjvex);
count++;
countfloor++;
}
p=p->nextarc;
}
}
}
printf("%d: %.2lf%c",i,100*((double)count)/G->arcnum,c);
printf("\n");
}
}
#include"head.h"
int main()
{
ALGraph G;
int n=0,m=0;
while(1)
{
scanf("%d%d",&n,&m);
if(n==0&&m==0)
break;
create_graph(&G,n,m);
wide_traveser(&G);
}
return 0;
}
```![在这里插入图片描述](https:
![在这里插入图片描述](https: