这是我的第一个问题,是的,这是一项“作业”作业。我已经工作了几个小时,但无法使算法正常工作。我编写的程序应该包含一个接受12 x 12数组并找到末尾路径的函数。主要功能找到迷宫的起点并将其更改为“ x”以表示“玩家”的位置。然后,主函数调用mazePrint函数,该函数接受数组在清除屏幕后将其打印出来。然后,它调用接受数组的mazeTraversal函数。 mazeTraversal的第一部分尝试找到“ x”的位置并将其替换为“。”。下一部分应该确定“ x”面向的方向。我用4、5、6和8(西,南,东和北(请看数字键盘))表示它的朝向。根据其面对的方式,mazeTraversal尝试确定右侧是否有开放路径,然后是前方,然后是左侧,然后是背后,然后将X放置在该位置并更改x的方式面对。当我运行程序时,第二步移动后出现问题。多谢您的协助,如果不是这样的问题,对不起。

#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);
}

最佳答案

在每个break;代码块之后,您都缺少switch(face)中的case:语句。如果没有break;语句,您的代码将进入到每个下一个case:,而这并不是您想要的。

关于c - C中的右手迷宫遍历,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10132459/

10-12 16:15