您的位置:首页 > 其它

用广度优先搜索解迷宫问题

2015-05-05 22:27 423 查看
//By LYLtim  

  

#include<stdio.h>  

  

const int di[4] = {0,1,0,-1},  

          dj[4] = {1,0,-1,0};  

  

unsigned maze[5][5] = {  

    2, 1, 0, 0, 0,  

    0, 1, 0, 1, 0,  

    0, 0, 0, 0, 0,  

    0, 1, 1, 1, 0,  

    0, 0, 0, 1, 0},  

    head = 0, tail = 1;  

  

struct { int i, j; } que[23] = {0};  

  

void print_maze(void)  

{  

    int i, j;  

    for (i = 0; i < 5; i++) {  

        for (j = 0; j < 5; j++)  

            printf("%d ", maze[i][j]);  

        putchar('\n');  

    }  

    printf("*********\n");  

}  

  

int main(void)  

{  

    while (head != tail) {  

        head = (head + 1) % 23;  

        int i;  

        for (i = 0; i < 4; i++)  

            if (que[head].i + di[i] >= 0 && que[head].i + di[i] < 5  

                && que[head].j + dj[i] >= 0 && que[head].j +dj[i] < 5  

                && maze[que[head].i + di[i]][que[head].j +dj[i]] == 0) {  

                    que[tail = (tail + 1) % 23].i = que[head].i + di[i];  

                    que[tail].j = que[head].j +dj[i];  

                    maze[que[head].i + di[i]][que[head].j +dj[i]] = 2;  

                    if (que[head].i + di[i] == 4 && que[head].j +dj[i] == 4) {  

                        printf("Have path.\n"); exit(0);  

                    }  

            }  

        print_maze();  

    }  

    printf("No path.\n");  

    return 0;  

}  

运行结果如下:
2 1 0 0 0
2 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
*********
2 1 0 0 0
2 1 0 1 0
2 0 0 0 0
0 1 1 1 0
0 0 0 1 0
*********
2 1 0 0 0
2 1 0 1 0
2 2 0 0 0
2 1 1 1 0
0 0 0 1 0
*********
2 1 0 0 0
2 1 0 1 0
2 2 2 0 0
2 1 1 1 0
0 0 0 1 0
*********
2 1 0 0 0
2 1 0 1 0
2 2 2 0 0
2 1 1 1 0
2 0 0 1 0
*********
2 1 0 0 0
2 1 2 1 0
2 2 2 2 0
2 1 1 1 0
2 0 0 1 0
*********
2 1 0 0 0
2 1 2 1 0
2 2 2 2 0
2 1 1 1 0
2 2 0 1 0
*********
2 1 0 0 0
2 1 2 1 0
2 2 2 2 2
2 1 1 1 0
2 2 0 1 0
*********
2 1 2 0 0
2 1 2 1 0
2 2 2 2 2
2 1 1 1 0
2 2 0 1 0
*********
2 1 2 0 0
2 1 2 1 0
2 2 2 2 2
2 1 1 1 0
2 2 2 1 0
*********
2 1 2 0 0
2 1 2 1 2
2 2 2 2 2
2 1 1 1 2
2 2 2 1 0
*********
2 1 2 2 0
2 1 2 1 2
2 2 2 2 2
2 1 1 1 2
2 2 2 1 0
*********
2 1 2 2 0
2 1 2 1 2
2 2 2 2 2
2 1 1 1 2
2 2 2 1 0
*********
Have path.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: