데이터 구조 --- 미로 문제 풀이 (C 언어)
#include
#include
#define FALSE 0
#define TRUE 1
#define OK 1
#define M 20
#define N 20
typedef struct mark //
{
int x;
int y;
}Mark;
struct Element //
{
int x,y; //x ,y
int d; //
};
typedef struct LStack //
{
Element elem;
struct LStack *next;
}*PLStack;
/************* ****************/
int InitStack(PLStack &S)//
{
S=NULL;
return OK;
}
int StackEmpty(PLStack S)//
{
if(S==NULL)
return OK;
else
return FALSE;
}
int Push(PLStack &S, Element e)//
{
PLStack p;
p=(PLStack)malloc(sizeof(LStack));
p->elem=e;
p->next=S;
S=p;
return OK;
}
int Pop(PLStack &S,Element &e) //
{
PLStack p;
if(!StackEmpty(S))
{
e=S->elem;
p=S;
S=S->next;
free(p);
return OK;
}
else
return FALSE;
}
/************* *******************/
void initmaze(int maze[M][N])
{
int m,n; // ,
printf(" m=");
scanf("%d",&m);
printf(" n=");
scanf("%d",&n);
printf("
:
,0 ,1
",m,n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&maze[i][j]);
printf(" ( )
"); //
for(int i=0;i<=m+1;i++) //
{
maze[i][0]=1;
maze[i][n+1]=1;
}
for(int j=0;j<=n+1;j++)
{
maze[0][j]=1;
maze[m+1][j]=1;
}
for(int i=0;i<=m+1;i++) //
{
for(int j=0;j<=n+1;j++)
printf("%d ",maze[i][j]);
printf("
");
}
}
/************* *************/
void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2])
{
int i,j,d;
int a,b;
Element elem,e;
PLStack S1,S2;
InitStack(S1);
InitStack(S2);
maze[start.x][start.y]=2; //
elem.x=start.x;
elem.y=start.y;
elem.d=0; // 0 , 1; 2; 3 ; 4
Push(S1,elem);
while(!StackEmpty(S1)) //
{
Pop(S1,elem);
i=elem.x;
j=elem.y;
d=elem.d+1; //
while(d<=4) //
{
a=i+diradd[d-1][0];
b=j+diradd[d-1][1];
if(a==end.x && b==end.y && maze[a][b]==0) //
{
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem);
elem.x=a;
elem.y=b;
elem.d=6; // -1
Push(S1,elem);
printf("
1= 2= 3= 4= 6
:( , , )
");
while(S1) //
{
Pop(S1,e);
Push(S2,e);
}
while(S2) //
{
Pop(S2,e);
printf("->(%d,%d,%d)",e.x,e.y,e.d);
}
return; // , break, ,exit , return
}
if(maze[a][b]==0) //
{
maze[a][b]=2; //
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem); //
i=a; //
j=b;
d=0;
}
d++;
}
}
printf("
");
}
int main(){
int mg[M][N];
Mark start,end; //start,end
int add[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//
initmaze(mg);//
printf(" , [ ]
");
scanf("%d,%d",&start.x,&start.y);
printf(" , [ ]
");
scanf("%d,%d",&end.x,&end.y);
MazePath(start,end,mg,add); //find path
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.