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

定义一个二维数组:

int maze[5][5] = {
	0, 1, 0, 0, 0,
	0, 1, 0, 1, 0,
	0, 0, 0, 0, 0,
	0, 1, 1, 1, 0,
	0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。程序如下:

[cpp] 
view plain
copy

  1. //By LYLtim  
  2.   
  3. #include<stdio.h>  
  4.   
  5. const int di[4] = {0,1,0,-1},  
  6.           dj[4] = {1,0,-1,0};  
  7.   
  8. unsigned maze[5][5] = {  
  9.     2, 1, 0, 0, 0,  
  10.     0, 1, 0, 1, 0,  
  11.     0, 0, 0, 0, 0,  
  12.     0, 1, 1, 1, 0,  
  13.     0, 0, 0, 1, 0},  
  14.     ip = 0;  
  15.   
  16. struct { int i, j; } path[23] = {0};  
  17.   
  18. void print_maze(void)  
  19. {  
  20.     int i, j;  
  21.     for (i = 0; i < 5; i++) {  
  22.         for (j = 0; j < 5; j++)  
  23.             printf(“%d “, maze[i][j]);  
  24.         putchar(‘\n’);  
  25.     }  
  26.     printf(“*********\n”);  
  27. }  
  28.   
  29. void print_path(void)  
  30. {  
  31.     int i = 0;  
  32.     printf(“(0,0)”);  
  33.     for (i = 0; i < ip; i++)  
  34.         printf(“->(%d,%d)”, path[i].i, path[i].j);  
  35.     exit(0);  
  36. }  
  37.   
  38. void try(int i, int j)  
  39. {  
  40.     int k;  
  41.     for (k = 0; k < 4; k++)  
  42.         if (i + di[k] >= 0 && i + di[k] <5  
  43.             && j + dj[k] >= 0 && j + dj[k] < 5  
  44.             && maze[i + di[k]][j + dj[k]] == 0) {  
  45.                 maze[i + di[k]][j + dj[k]] = 2;  
  46.                 path[ip++].i = i + di[k]; path[ip].j = j + dj[k];  
  47.                 print_maze();  
  48.                 if (i + di[k] == 4 && j + dj[k] == 4)  
  49.                     print_path();  
  50.                 else  
  51.                     try(i + di[k], j + dj[k]);  
  52.                 maze[i+di[k]][j+dj[k]] = 0;  
  53.                 path[–ip].i = 0; path[ip].j = 0;  
  54.         }  
  55. }  
  56.           
  57.   
  58. int main(void)  
  59. {  
  60.     try(0, 0);  
  61.     return 0;  
  62. }  

运行结果如下:

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 
0 1 1 1 0 
0 0 0 1 0 
*********
2 1 0 0 0 
2 1 0 1 0 
2 2 2 0 0 
0 1 1 1 0 
0 0 0 1 0 
*********
2 1 0 0 0 
2 1 0 1 0 
2 2 2 2 0 
0 1 1 1 0 
0 0 0 1 0 
*********
2 1 0 0 0 
2 1 0 1 0 
2 2 2 2 2 
0 1 1 1 0 
0 0 0 1 0 
*********
2 1 0 0 0 
2 1 0 1 0 
2 2 2 2 2 
0 1 1 1 2 
0 0 0 1 0 
*********
2 1 0 0 0 
2 1 0 1 0 
2 2 2 2 2 
0 1 1 1 2 
0 0 0 1 2 
*********
(0,0)->(1,0)->(2,0)->(2,0)->(2,1)->(2,2)->(2,3)->(3,4)->(4,4)
    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/judyge/article/details/45509947
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞