#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 8
#define TRUE 1
#define FALSE 0
typedef struct Node *P_Node;
typedef struct Node
{
P_Node link;
int vtx;
}Node;
P_Node graph[MAX];
short int mark[MAX];
int Que[MAX];
int matrix[MAX][MAX]={
{0,1,1,0,0,0,0,0},
{1,0,0,1,1,0,0,0},
{1,0,0,0,0,1,1,0},
{0,1,0,0,0,0,0,1},
{0,1,0,0,0,0,0,1},
{0,0,1,0,0,0,0,1},
{0,0,1,0,0,0,0,1},
{0,0,0,1,1,1,1,0}
};
void init();
void Clear_mark();
void bfs(int v);
void enq(int *rear,int vtx);
int deq(int *front);
int main()
{
Clear_mark();
init();
bfs(0);
puts("");
return 0;
}
void init()
{
int x,y;
P_Node move;
P_Node st;
P_Node tmp;
for(x=0; x<MAX; x++)
{
st = graph[x];
for(y=0; y<MAX; y++)
{
if(matrix[x][y] != FALSE)
{
tmp = (P_Node)malloc(sizeof(Node));
tmp->vtx = y;
if(graph[x] == st)
{
move = tmp;
graph[x] = tmp;
}
else
{
move->link = tmp;
move = tmp;
}
}
}
tmp->link = NULL;
}
}
void bfs(int v)
{
P_Node w;
int front,rear;
front = rear = -1;
printf("%3d",v);
mark[v] = TRUE;
enq(&rear, v);
while(front != rear)
{
v = deq(&front);
for(w = graph[v]; w; w = w->link)
{
if(!mark[w->vtx]) // 마킹되지않은 정점이면(FALSE)
{
printf("%3d",w->vtx);
enq(&rear,w->vtx);
mark[w->vtx] = TRUE;
}
}
}
}
void enq(int *rear,int vtx)
{
*rear = (*rear)%MAX;
Que[++(*rear)] = vtx;
}
int deq(int *front)
{
return Que[++(*front)%MAX];
}
void Clear_mark()
{
int i;
for(i=0; i<MAX; i++)
{
mark[i] = FALSE;
}
}
'IT' 카테고리의 다른 글
winner tree (0) | 2014.05.14 |
---|---|
dfs (0) | 2014.05.14 |
자료구조는 그래프 부터 (0) | 2014.05.14 |
이 역시 그래프 (0) | 2014.05.14 |
그래프 관련인듯 (0) | 2014.05.14 |