#include
#include
int result;
int layer;
typedef struct node
{
unsigned int data;
int layer;
struct node * next;
} NODE, * LPNODE, * QUEUE;
QUEUE Queue (void)
{
LPNODE startPoint = (LPNODE)malloc(sizeof(NODE));
startPoint->next = NULL;
return (QUEUE)startPoint;
}
void DeleteQueue (QUEUE queue)
{
LPNODE currentNode = (LPNODE)queue->next;
LPNODE nextNode = currentNode->next;
while (currentNode->next != NULL)
{
free(currentNode);
currentNode = nextNode;
nextNode = nextNode->next;
}
free(queue);
return;
}
void Push (unsigned int data, int layer, QUEUE queue)
{
LPNODE currentNode = (LPNODE)queue;
while (currentNode->next != NULL)
currentNode = currentNode->next;
currentNode->next = (LPNODE)malloc(sizeof(NODE));
currentNode = currentNode->next;
currentNode->data = data;
currentNode->layer = layer;
currentNode->next = NULL;
return;
}
unsigned int Pop (QUEUE queue)
{
LPNODE startPoint = (LPNODE)queue;
LPNODE currentNode = NULL;
unsigned int data;
if (startPoint->next == NULL)
return 0;
if (startPoint->next->next == NULL)
{
data = startPoint->next->data;
layer = startPoint->next->layer;
free(startPoint->next);
startPoint->next = NULL;
return data;
}
currentNode = startPoint->next->next;
data = startPoint->next->data;
layer = startPoint->next->layer;
free(startPoint->next);
startPoint->next = currentNode;
return data;
}
void search (unsigned int x, int layer, QUEUE queue)
{
if (x <= 1)
{
result = layer;
return;
}
if ((x % 3) == 0)
Push(x / 3, layer + 1, queue);
if ((x % 2 ) == 0)
Push (x / 2, layer + 1, queue);
Push (x - 1, layer + 1, queue);
return;
}
int main (void)
{
unsigned int input, tmp;
QUEUE que = Queue();
scanf ("%d", &input);
Push(input, 0, que);
while (!result)
{
tmp = Pop(que);
search(tmp, layer, que);
}
printf("%d", result);
DeleteQueue(que);
return 0;
}
너무싫어
댓글 0