이것이 내 첫 번째 질문이며, 그렇습니다. 숙제 임무입니다. 나는 몇 시간 동안 그 일을 해왔지만 알고리즘을 작동시킬 수는 없다. 필자가 작성한 프로그램은 12x12 배열을 받아들이고 끝까지의 경로를 찾는 함수를 포함하고 있다고 가정합니다. main 함수는 미로의 시작을 찾아 "x"로 변경하여 "player"의 위치를 나타냅니다. 그런 다음 main 함수는 배열을 받아들이는 mazePrint 함수를 호출하여 화면을 지운 후에 인쇄합니다. 그런 다음 배열을 받아들이는 mazeTraversal 함수를 호출합니다. mazeTraversal의 첫 번째 부분은 "x"의 위치를 찾고 "." 다음 부분은 "x"가 향하고있는 방향을 결정하기로되어 있습니다. 제가 직면하고있는 방식을 표현하기 위해 4, 5, 6, 8 (서쪽, 남쪽, 동쪽, 북쪽 (숫자 패드를보십시오))을 사용했습니다. 그것이 향하는 방법을 기반으로, mazeTraversal은 오른쪽에 열린 경로가 있는지를 결정하고, 그 다음 앞에, 왼쪽, 그리고 뒤 그리고 나서 그 위치에 X를 놓고 x가 바뀌는 방식을 변경하려고 시도합니다 면함. 프로그램을 실행할 때 두 번째 이동 후에 뭔가 잘못되었습니다. 어떤 도움을 주셔서 감사합니다. 그런 질문이있는 곳이 아닌 경우 미안합니다.C에서 우회 미로 탐색
#include <stdio.h>
#include <stdlib.h>
void mazePrint(char *maze[12][12]);
void mazeTraversal(char *maze[12][12]);
static int face = 6;
main()
{
int i = 0;
int j = 0;
int k = 0;
int start;
int xpos;
char *mazeone[12][12] = {
//0///1///2///3///4///5///6///7///8///9///10//11///
"#","#","#","#","#","#","#","#","#","#","#","#",//0
"#",".",".",".","#",".",".",".",".",".",".","#",//1
".",".","#",".","#",".","#","#","#","#",".","#",//2
"#","#","#",".","#",".",".",".",".","#",".","#",//3
"#",".",".",".",".","#","#","#",".","#",".",".",//4
"#","#","#","#",".","#",".","#",".","#",".","#",//5
"#","#",".","#",".","#",".","#",".","#",".","#",//6
"#","#",".","#",".","#",".","#",".","#",".","#",//7
"#",".",".",".",".",".",".",".",".","#",".","#",//8
"#","#","#","#","#","#",".","#","#","#",".","#",//9
"#",".",".",".",".",".",".","#",".",".",".","#",//10
"#","#","#","#","#","#","#","#","#","#","#","#",};//11
for (i = 0; i <12; i++)
if (mazeone[i][0] == ".") {
start = i;
mazeone[start][0] = "x";
xpos = start;
break;
}
printf("X is the starting point.\n");
printf("Press Space Bar to watch the X move.\n\n\n");
getchar();
mazePrint(mazeone);
getchar();
return 0;
}
void mazePrint(char *maze[12][12])
{
int x = 0;
int y = 0;
system("cls");
for (x = 0; x < 12; x++) {
for (y = 0; y < 12; y++) {
printf("%s", maze[x][y]);
}
printf("\n");
}
getchar();
mazeTraversal(maze);
}
void mazeTraversal(char *maze[12][12])
{
int x = 0;
int y = 0;
for (x = 0; x < 12; x++) {
for (y = 0; y < 12; y++) {
if (maze[y][x] == "x")
break;
}
if(maze[y][x] == "x")
break;
}
for (y = 0; y < 12; y++) {
for (x = 0; x < 12; x++) {
if (maze[y][x] == "x")
break;
}
if (maze[y][x] == "x")
break;
}
maze[y][x] = ".";
switch (face) {
case 6:{
if (maze[y][x-1] == ".") {
maze[y][x-1] = "x";
face = 5;
} else if (maze[y + 1][x] == ".") {
maze[y + 1][x] = "x";
face = 6;
} else if (maze[y][x+1] == ".") {
maze[y][x+1] = "x";
face = 8;
} else if (maze[y - 1][x] == ".") {
maze[y - 1][x] = "x";
face = 4;
}
}
case 8:{
if (maze[y + 1][x] == ".") {
maze[y + 1][x] = "x";
face = 6;
} else if (maze[y][x+1] == ".") {
maze[y][x+1] = "x";
face = 8;
} else if (maze[y - 1][x] == ".") {
maze[y - 1][x] = "x";
face = 4;
} else if (maze[y][x-1] == ".") {
maze[y][x-1] = "x";
face = 5;
}
}
case 4:{
if (maze[y][x+1] == ".") {
maze[y][x+1] = "x";
face = 8;
} else if (maze[y - 1][x] == ".") {
maze[y - 1][x] = "x";
face = 4;
} else if (maze[y][x-1] == ".") {
maze[y][x-1] = "x";
face = 5;
} else if (maze[y + 1][x] == ".") {
maze[y + 1][x] = "x";
face = 6;
}
}
case 5:{
if (maze[y - 1][x] == ".") {
maze[y - 1][x] = "x";
face = 4;
} else if (maze[y][x-1] == ".") {
maze[y][x-1] = "x";
face = 5;
} else if (maze[y + 1][x] == ".") {
maze[y + 1][x] = "x";
face = 6;
} else if (maze[y][x+1] == ".") {
maze[y][x+1] = "x";
face = 8;
}
}
}
mazePrint(maze);
}
당신은 stackoverflow를 위해 4 개의 공백으로 소스를 들여 썼다. 불행히도 일부 줄의 들여 쓰기는 하드 탭을 사용하여 이루어 지므로 엉망이되었습니다. – Kaz
안녕하세요 Forest, StackOverflow에 오신 것을 환영합니다. 거의 코드를 들여 쓰기가 어렵 기 때문에 코드를 형식화하면 좋을 것입니다. 그 외에도 문제를 좁히고 일반화하려고하십시오. – bitmask
@Shingetsu : 스크롤 휠이 끊어 졌습니까? – bitmask