#include<stdio.h>
#include<stdlib.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
typedef struct graphnode {
int vertex;
struct graphnode * link;
} graphnode;
typedef struct graphtype {
int n;
graphnode * adj[ MAX] ;
} graphtype;
typedef int element;
typedef struct {
element queue[ MAX] ;
int front, rear;
} queue;
int visited[ MAX] = { FALSE } ;
void error( char * message)
{
}
void init( graphtype * g)
{
g-> n = 0 ;
for ( int v = 0 ; v < MAX; v++ )
g-> adj[ v] = NULL;
}
void insertv( graphtype * g, int v)
{
if ( ( g-> n) + 1 > MAX)
error( "그래프 정점 개수 초과" ) ;
for ( int i = 0 ; i < v; i++ )
g-> n++;
}
void inserte( graphtype * g, int u, int v)
{
if ( u >= g-> n || v >= g-> n)
error( "그래프 정점 오류 번호" ) ;
graphnode
* node
= ( graphnode
* ) malloc ( sizeof ( graphnode
) ) ; node-> vertex = v;
node-> link = g-> adj[ u] ;
g-> adj[ u] = node;
}
void print( graphtype * g)
{
for ( int i = 0 ; i < g-> n; i++ )
{
graphnode * p = g-> adj[ i] ;
while ( p != NULL)
{
p = p-> link;
}
}
}
void initq( queue * q)
{
q-> front = q-> rear = 0 ;
}
int is_empty( queue * q)
{
return ( q-> front == q-> rear) ;
}
int is_full( queue * q)
{
return ( ( q-> rear + 1 ) % MAX == q-> front) ;
}
void enqueue( queue * q, element item)
{
if ( is_full( q) )
error( "큐 포화상태" ) ;
q-> rear = ( q-> rear) + 1 % MAX;
q-> queue[ q-> rear] = item;
}
element dequeue( queue * q)
{
if ( is_empty( q) )
error( "큐가 공백상태" ) ;
q-> front = ( q-> front + 1 ) % MAX;
return q-> queue[ q-> front] ;
}
void dfs( graphtype * g, int v)
{
graphnode * w;
visited[ v] = TRUE;
for ( w = g-> adj[ v] ; w!= NULL; w = w-> link)
{
if ( ! visited[ w-> vertex] )
dfs( g, w-> vertex) ;
}
}
void bfs( graphtype * g, int v)
{
graphnode * w;
queue q;
initq( & q) ;
visited[ v] = TRUE;
enqueue( & q, v) ;
while ( ! is_empty( & q) )
{
v = dequeue( & q) ;
for ( w = g-> adj[ v] ; w; w = w-> link)
{
if ( ! visited[ w-> vertex] )
{
visited[ w-> vertex] = TRUE;
enqueue( & q, w-> vertex) ;
}
}
}
}
void main( )
{
graphtype * g;
g
= ( graphtype
* ) malloc ( sizeof ( graphtype
) ) ; init( g) ;
insertv( g, 4 ) ;
inserte( g, 0 , 2 ) ;
inserte( g, 2 , 1 ) ;
inserte( g, 2 , 3 ) ;
inserte( g, 0 , 4 ) ;
inserte( g, 4 , 5 ) ;
inserte( g, 1 , 5 ) ;
bfs( g, 0 ) ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgojZGVmaW5lIE1BWCA1MAojZGVmaW5lIFRSVUUgMQojZGVmaW5lIEZBTFNFIDAKCnR5cGVkZWYgc3RydWN0IGdyYXBobm9kZSB7CglpbnQgdmVydGV4OwoJc3RydWN0IGdyYXBobm9kZSAqbGluazsKfWdyYXBobm9kZTsKCnR5cGVkZWYgc3RydWN0IGdyYXBodHlwZSB7CglpbnQgbjsKCWdyYXBobm9kZSAqYWRqW01BWF07Cn1ncmFwaHR5cGU7CnR5cGVkZWYgaW50IGVsZW1lbnQ7CnR5cGVkZWYgc3RydWN0IHsKCWVsZW1lbnQgcXVldWVbTUFYXTsKCWludCBmcm9udCwgcmVhcjsKfXF1ZXVlOwoKaW50IHZpc2l0ZWRbTUFYXSA9IHsgRkFMU0UgfTsKCnZvaWQgZXJyb3IoY2hhciAqbWVzc2FnZSkKewoJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CglleGl0KDEpOwp9CnZvaWQgaW5pdChncmFwaHR5cGUgKmcpCnsKCWctPm4gPSAwOwoJZm9yIChpbnQgdiA9IDA7IHYgPCBNQVg7IHYrKykKCQlnLT5hZGpbdl0gPSBOVUxMOwp9Cgp2b2lkIGluc2VydHYoZ3JhcGh0eXBlICpnLCBpbnQgdikKewoJaWYgKChnLT5uKSArIDEgPiBNQVgpCgkJZXJyb3IoIuq3uOuemO2UhCDsoJXsoJAg6rCc7IiYIOy0iOqzvCIpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCB2OyBpKyspCgkJZy0+bisrOwp9Cgp2b2lkIGluc2VydGUoZ3JhcGh0eXBlICpnLCBpbnQgdSwgaW50IHYpCnsKCWlmICh1ID49IGctPm4gfHwgdiA+PSBnLT5uKQoJCWVycm9yKCLqt7jrnpjtlIQg7KCV7KCQIOyYpOulmCDrsojtmLgiKTsKCWdyYXBobm9kZSAqbm9kZSA9IChncmFwaG5vZGUgKiltYWxsb2Moc2l6ZW9mKGdyYXBobm9kZSkpOwoJbm9kZS0+dmVydGV4ID0gdjsKCW5vZGUtPmxpbmsgPSBnLT5hZGpbdV07CglnLT5hZGpbdV0gPSBub2RlOwp9Cgp2b2lkIHByaW50KGdyYXBodHlwZSAqZykKewoJZm9yIChpbnQgaSA9IDA7IGkgPCBnLT5uOyBpKyspCgl7CgkJZ3JhcGhub2RlICpwID0gZy0+YWRqW2ldOwoJCXByaW50Zigi7KCV7KCQICVk7J2YIOyduOygkSDrpqzsiqTtirggIixpKTsKCQl3aGlsZSAocCAhPSBOVUxMKQoJCXsKCQkJcHJpbnRmKCItPiAlZCIsIHAtPnZlcnRleCk7CgkJCXAgPSBwLT5saW5rOwoJCX0KCQlwcmludGYoIlxuIik7Cgl9Cn0Kdm9pZCBpbml0cShxdWV1ZSAqcSkKewoJcS0+ZnJvbnQgPSBxLT5yZWFyID0gMDsKfQppbnQgaXNfZW1wdHkocXVldWUgKnEpCnsKCXJldHVybiAocS0+ZnJvbnQgPT0gcS0+cmVhcik7Cn0KCmludCBpc19mdWxsKHF1ZXVlICpxKQp7CglyZXR1cm4oKHEtPnJlYXIgKyAxKSAlIE1BWCA9PSBxLT5mcm9udCk7Cn0KCnZvaWQgZW5xdWV1ZShxdWV1ZSAqcSwgZWxlbWVudCBpdGVtKQp7CglpZiAoaXNfZnVsbChxKSkKCQllcnJvcigi7YGQIO2PrO2ZlOyDge2DnCIpOwoJcS0+cmVhciA9IChxLT5yZWFyKSArIDEgJSBNQVg7CglxLT5xdWV1ZVtxLT5yZWFyXSA9IGl0ZW07Cn0KCmVsZW1lbnQgZGVxdWV1ZShxdWV1ZSAqcSkKewoJaWYgKGlzX2VtcHR5KHEpKQoJCWVycm9yKCLtgZDqsIAg6rO167Cx7IOB7YOcIik7CglxLT5mcm9udCA9IChxLT5mcm9udCArIDEpICUgTUFYOwoJcmV0dXJuIHEtPnF1ZXVlW3EtPmZyb250XTsKfQoKdm9pZCBkZnMoZ3JhcGh0eXBlICpnLCBpbnQgdikKewoJZ3JhcGhub2RlICp3OwoJdmlzaXRlZFt2XSA9IFRSVUU7CglwcmludGYoIiVkLT4gIiwgdik7Cglmb3IgKHcgPSBnLT5hZGpbdl07IHchPU5VTEw7IHcgPSB3LT5saW5rKQoJewoJCWlmICghdmlzaXRlZFt3LT52ZXJ0ZXhdKQoJCQlkZnMoZywgdy0+dmVydGV4KTsKCX0KfQp2b2lkIGJmcyhncmFwaHR5cGUgKmcsIGludCB2KQp7CglncmFwaG5vZGUgKnc7CglxdWV1ZSBxOwoJaW5pdHEoJnEpOwoJdmlzaXRlZFt2XSA9IFRSVUU7CglwcmludGYoIiVkLT4gIiwgdik7CgllbnF1ZXVlKCZxLCB2KTsKCXdoaWxlICghaXNfZW1wdHkoJnEpKQoJewoJCXYgPSBkZXF1ZXVlKCZxKTsKCQlmb3IgKHcgPSBnLT5hZGpbdl07IHc7IHcgPSB3LT5saW5rKQoJCXsKCQkJaWYgKCF2aXNpdGVkW3ctPnZlcnRleF0pCgkJCXsKCQkJCXZpc2l0ZWRbdy0+dmVydGV4XSA9IFRSVUU7CgkJCQlwcmludGYoIiVkLT4gIix3LT52ZXJ0ZXgpOwoJCQkJZW5xdWV1ZSgmcSwgdy0+dmVydGV4KTsKCQkJfQoJCX0KCX0KfQoKCnZvaWQgbWFpbigpCnsKCWdyYXBodHlwZSAqZzsKCWcgPSAoZ3JhcGh0eXBlICopbWFsbG9jKHNpemVvZihncmFwaHR5cGUpKTsKCWluaXQoZyk7CglpbnNlcnR2KGcsIDQpOwoKCWluc2VydGUoZywgMCwgMik7CglpbnNlcnRlKGcsIDIsIDEpOwoJaW5zZXJ0ZShnLCAyLCAzKTsKCWluc2VydGUoZywgMCwgNCk7CglpbnNlcnRlKGcsIDQsIDUpOwoJaW5zZXJ0ZShnLCAxLCA1KTsKCglwcmludGYoIuq5iuydtCDsmrDshKAg7YOQ7IOJXG4iKTsKCWJmcyhnLCAwKTsKCXByaW50ZigiXG4iKTsKCWZyZWUoZyk7CglnZXRjaCgpOwp9Cgo=