창고 와 대열 로 미궁 문 제 를 풀다
3698 단어 데이터 구조
② 、 미로 에서 벗 어 나 는 코드 작성 하기;
③ 주 함 수 를 작성 한다.
1. 창고:
#include
#include
#include
#include
#define MaxSize 100
//①、 ;
typedef struct
{ int i;
int j;
int di;
} Box;
typedef struct
{ Box data[MaxSize];
int top;
} StType;
//②、 ;
bool mgpath(int xi,int yi,int xe,int ye)
{ int i,j,k,di,find;
StType st;
st.top=-1;
st.top++;
st.data[st.top].i=xi; st.data[st.top].j=yi;
st.data[st.top].di=-1; mg[xi][yi]=-1;
while (st.top>-1)
{ i=st.data[st.top].i;j=st.data[st.top].j;
di=st.data[st.top].di;
if (i==xe && j==ye)
{ printf(" :
");
for (k=0;k<=st.top;k++)
{ printf("\t(%d,%d)",st.data[k].i,st.data[k].j);
if ((k+1)%5==0)
printf("
");
}
printf("
");
return true;
}
find=0;
while (di<4 && find==0)
{ di++;
switch(di)
{
case 0:i=st.data[st.top].i-1;j=st.data[st.top].j;
break;
case 1:i=st.data[st.top].i;j=st.data[st.top].j+1;
break;
case 2:i=st.data[st.top].i+1;j=st.data[st.top].j;
break;
case 3:i=st.data[st.top].i,j=st.data[st.top].j-1;
break;
}
if (mg[i][j]==0) find=1;
}
if (find==1)
{ st.data[st.top].di=di;
st.top++;
st.data[st.top].i=i; st.data[st.top].j=j;
st.data[st.top].di=-1;
mg[i][j]=-1;
}
else
{ mg[st.data[st.top].i][st.data[st.top].j]=0;
st.top--;
}
}
return false;
}
//③、 :
:
(1,1) (1,2) (2,2) (3,2) (3,1)
(4,1) (5,1) (5,2) (5,3) (6,3)
(6,4) (6,5) (5,5) (4,5) (4,6)
(4,7) (3,7) (3,8) (4,8) (5,8)
(6,8) (7,8) (8,8)
2. 대열
#include
#include
#include
#include
#define MaxSize 100
//①、 ;
typedef struct
{ int i,j;
int pre;
} Box;
typedef struct
{ Box data[MaxSize];
int front,rear;
} QuType;
//②、 ;:
bool mgpath1(int xi,int yi,int xe,int ye)
{ int i,j,find=0,di;
QuType qu;
qu.front=qu.rear=-1;
qu.rear++;
qu.data[qu.rear].i=xi; qu.data[qu.rear].j=yi;
qu.data[qu.rear].pre=-1;
mg[xi][yi]=-1;
while (qu.front!=qu.rear && !find)
{ qu.front++;
i=qu.data[qu.front].i; j=qu.data[qu.front].j;
if (i==xe && j==ye)
{ find=1; print(qu,qu.front); return true; }
for (di=0;di<4;di++)
{ switch(di)
{
case 0:i=qu.data[qu.front].i-1;
j=qu.data[qu.front].j; break;
case 1:i=qu.data[qu.front].i;
j=qu.data[qu.front].j+1; break;
case 2:i=qu.data[qu.front].i+1;
j=qu.data[qu.front].j; break;
case 3:i=qu.data[qu.front].i;
j=qu.data[qu.front].j-1; break;
}
if (mg[i][j]==0)
{ qu.rear++;
qu.data[qu.rear].i=i; qu.data[qu.rear].j=j;
qu.data[qu.rear].pre=qu.front;
mg[i][j]=-1;
}
}
}
return false;
}
//③、 :
:
(1,1)(2,1)(3,1)(4,1)(5,1)
(5,2)(5,3)(6,3)(6,4)(6,5)
(7,5)(8,5)(8,6)(8,7)(8,8)
스 택 과 대기 열 두 가지 방법 으로 미로 문 제 를 쓴다.스 택 과 대열 의 공통점 과 차이 점 을 알 게 되 었 습 니 다.창 고 는 역 추적 을 통 해 진행 되 었 다.거 슬러 올 라 가기 편리 하도록 갈 수 있 는 사각형 에 대해 모두 창고 에 들 어가 다음 에 갈 수 있 는 위 치 를 탐색 하고 이 갈 수 있 는 위 치 를 창고 에 보관 해 야 한다.이것 은 창고 가 미로 문제 에 대해 선택 한 방법 이다.대기 열 은 출구 를 찾 을 때 까지 대기 열의 특징 을 이용 하여 한 층 한 층 밖으로 확장 할 수 있 는 점 입 니 다.우리 뒤에서 그림 에서 배 운 범위 우선 검색 방법 과 같다.실험 기간 동안 알파벳 대소 문자 가 많 았 다.그래서 헷 갈 려 서 문제 가 생 겼 어 요.쉼표 와 분 호 를 잘못 알 기도 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.