#include <stdio.h>
#include <stdlib.h>
#define Max_Vetex_Num 100
#define MAXSIZE 20
#define STACK_SIZE 30
typedef struct {
int vexs[Max_Vetex_Num];
int arcs[Max_Vetex_Num][Max_Vetex_Num];
int vexnum,arcnum;
}Mgraph;
typedef struct Squeue{
int data[MAXSIZE];//隊列內元素的最大長度
int front;//隊頭
int rear;//隊尾
}Squeue;
//初始化隊列
void InitQueue(Squeue *Q)
{
Q->front = Q->rear = 0;
}
//判斷隊列是否爲空
int isQueueEmpty(Squeue *qu)
{
if(qu->front == qu->rear)
{
return 1;
}
else
{
return 0;
}
}
//元素入隊操作
int EnQueue(Squeue *qu,int x)
{
if((qu->rear + 1) % MAXSIZE == qu->front)
{
return 0;
}
qu->rear = (qu->rear + 1) % MAXSIZE;
qu->data[qu->rear] = x;
return 1;
}
//元素出隊操作
int deQueue(Squeue *qu,int *x)
{
//若隊空則無法出隊
if(qu->front == qu->rear)
{
return 0;
}
qu->front = (qu->front + 1) % MAXSIZE;
*x = qu->data[qu->front];
return 1;
}
void BFSTraverse(Mgraph *G)
{
int i,f,r;
int v,w;
int visited[G->vexnum];
Squeue Q;
InitQueue(&Q);
for(i =0;i<G->vexnum;i++)
{
visited[i]=0;
}
for(v =0;v<G->vexnum;v++)
{
if(!visited[v])
{
visited[v]=1;
printf("%d ",G->vexs[v]);
EnQueue(&Q,v);
while(!isQueueEmpty(&Q))
{
int u;
deQueue(&Q,&u);
for(i=0;i<G->vexnum;i++)
{
if(G->arcs[u][i]&&visited[i]==0)
{
visited[i]=1;
printf("%d ",G->vexs[i]);
EnQueue(&Q,i);
}/*if*/
}
}/*WHILE*/
}/*IF*/
}/*FOR*/
}
void CreateMGraph(Mgraph *G){
int type;
int i,j,k,w;
int v1,v2;
scanf("%d",&type);
if(type==0)
{
scanf("%d,%d",&(G->vexnum),&(G->arcnum));
//自動構造頂點信息爲index
for(i=0;i<G->vexnum;i++)
{
G->vexs[i]=i;
}
//初始化鄰接矩陣,全部爲0
for(i=0;i<G->vexnum;i++){
for(j=0;j<G->vexnum;j++){
G->arcs[i][j]=0;
}
}
//輸入每行一個邊的偶對,如v1,v2
for(k=0;k<G->arcnum;k++)
{
scanf("%d,%d",&v1,&v2);
G->arcs[v1][v2]=1;
G->arcs[v2][v1]=1;
}
}else{
scanf("%d,%d",&(G->vexnum),&(G->arcnum));
//自動構造頂點信息爲index
for(i=0;i<G->vexnum;i++)
{
G->vexs[i]=i;
}
//初始化鄰接矩陣,全部爲0
for(i=0;i<G->vexnum;i++){
for(j=0;j<G->vexnum;j++){
G->arcs[i][j]=0;
}
}
for(k=0;k<G->arcnum;k++)
{
scanf("%d,%d",&v1,&v2);
G->arcs[v1][v2]=1;
}
}
//PrintVex(G);
}
void PrintVex(Mgraph *G)
{
int i,j;
for(i=0;i<G->vexnum;i++){
for(j=0;j<G->vexnum;j++)
{
printf("%d ",G->arcs[i][j]);
}
printf("\n");
}
}
int main()
{
Mgraph G;
CreateMGraph(&G);
BFSTraverse(&G);
getchar();
return 0;
}