미로 찾기 코드
3132 단어 데이터 구조
#include
#include
#define M 6 //
#define N 8 //
#define MAXSIZE 64 //
typedef struct
{
int x;
int y;
}item_t;
typedef struct
{
int x; //
int y;
int z; //
}coord_t;
typedef struct
{
int x[MAXSIZE-1];
int y[MAXSIZE-1];
int z[MAXSIZE-1];
int top ;
}stack_t;
//
int maze[M+2][N+2] =
{// 0 1 2 3 4 5 6 7 8 9
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },// 0
{ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 },// 1
{ 1, 1, 0, 1, 0, 1, 1, 1, 1, 1 },// 2
{ 1, 0, 1, 0, 0, 0, 0, 0, 1, 1 },// 3
{ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 },// 4
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 1 },// 5
{ 1, 0, 1, 1, 0, 0, 1, 1, 0, 1 },// 6
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } // 7
};
//
item_t move[8] = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
stack_t* init_stack(void)
{
stack_t* st = (stack_t *)malloc(sizeof(stack_t));
if(st == NULL)
{
printf("malloc error
");
return NULL;
}
st->top = -1;
return st;
}
int empty_stack(stack_t* st)
{
if(st->top == -1)
return 1;
else
return 0;
}
int full_stack(stack_t* st)
{
if(st->top > MAXSIZE -1)
return 1;
else
return 0;
}
int push_stack(stack_t* st, coord_t cor)
{
if(full_stack(st))
{
printf("stack full.
");
return 0;
}
st->top ++ ;
st->x[st->top] = cor.x ;
st->y[st->top] = cor.y ;
st->z[st->top] = cor.z ;
return 1;
}
int pop_stack(stack_t* st, coord_t* cor)
{
if(empty_stack(st))
{
printf("stack empty.
");
return 0;
}
cor->x = st->x[st->top] ;
cor->y = st->y[st->top] ;
cor->z = st->z[st->top] ;
st->top-- ;
return 1;
}
void loop_stack(stack_t* st)
{
coord_t cor;
printf(" :
");
while(!empty_stack(st))
{
pop_stack(st, &cor);
printf("x=%d y=%d z=%d
",cor.x, cor.y, cor.z);
}
}
int main(void)
{
int x,y,z,i,j;
coord_t cor;
stack_t* st = init_stack() ;
cor.x = 1;
cor.y = 1;
cor.z = -1; //
push_stack(st, cor); //
printf(" ...
");
while(!empty_stack(st)) //
{
pop_stack(st, &cor); //
x = cor.x;
y = cor.y;
z = cor.z + 1; //
while(z<8)
{
i = x + move[z].x; //
j = y + move[z].y;
if(maze[i][j] == 0) //
{
cor.x = x; //
cor.y = y;
cor.z = z;
push_stack(st, cor);
x = i; //
y = j;
maze[i][j] = -1; //
if((x==M) && (y==N)) //
{
cor.x = x; //
cor.y = y;
cor.z = z;
push_stack(st, cor);
goto loop;
}
else
z = 0;
}
else
{
z++ ;
}
}
}
loop:
loop_stack(st);
free(st);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.