老鼠走迷宮(2)輸出所有路徑(C語言)


需求  

  有一個迷宮,在迷宮的某個出口放着一塊奶酪。將一只老鼠由某個入口處放進去,它必須穿過迷宮,找到奶酪。請找出它的行走路徑。

STEP 1 題目轉化

  我們用一個二維數組來表示迷宮,用2表示迷宮的牆壁,用0表示通路。
  老鼠每走到一個格子的時候就將該位置的值置為1,表示老鼠的行走路徑包括這個格子。 

STEP 2 編程思路

  ⑴這個題目可以用遞歸方法,只需要最后一步走到迷宮出口所在的格子。

  ⑵每一步測試上、下、左、右四個方向,選擇一個方向前進。

STEP 3 要點整理

  ⑴輸出所有路徑的算法與輸出單條路徑相同,需要修改的是:打印函數放入遞歸函數中,才能實現多次輸出。

  ⑵在遞歸選擇下一步方向時,if條件添加“x < LEN && y < LEN”,避免溢出。

 

----------------------------------華麗麗的分割線---------------------------代碼君要出場了-------------------

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define LEN 9
 5 
 6 int maze[LEN][LEN] = {
 7     {2, 0, 2, 2, 2, 0, 2, 2, 2},
 8     {2, 0, 2, 2, 2, 0, 0, 2, 2},
 9     {2, 0, 0, 0, 0, 0, 0, 0, 2},
10     {2, 0, 2, 2, 0, 2, 2, 0, 2},
11     {2, 0, 0, 2, 0, 2, 2, 0, 2},
12     {2, 0, 0, 2, 0, 2, 2, 0, 2},
13     {2, 0, 0, 2, 0, 0, 0, 0, 0},
14     {2, 0, 0, 0, 0, 2, 2, 2, 2},
15     {2, 0, 2, 2, 0, 2, 2, 2, 2},
16 };                                           //構建迷宮
17 
18 int start_x = 1, start_y = 0;               //設置起點
19 int end_x = 8, end_y = 4;                   //設置終點
20 
21 void step(int x, int y);
22 void print_maze();
23 
24 int main(int argc, char argv[])
25 {    
26 
27     printf("maze:\n");                    //打印迷宮圖,為方便查看,將數字換為圖形打印
28     print_maze();
29 
30     step(start_x, start_y);
31 
32     return 0;
33 }
34 
35 
36 void step(int x, int y)                //用遞歸算法求解路徑 
37 {
38     maze[x][y] = 1;
39 
40     if(x == end_x && y == end_y)
41     {
42         print_maze();                //打印函數放入遞歸中,每找到一條成功路徑打印一次
43     }
44 
45     if(y < (LEN - 1) && maze[x][y + 1] == 0){step(x, y + 1);}           //邊界條件,避免溢出,感謝 @別把白天當黑夜 指正
46     if(x < (LEN - 1) && maze[x + 1][y] == 0){step(x + 1, y);}
47     if(y > 0 && maze[x][y - 1] == 0){step(x, y - 1);}
48     if(x > 0 && maze[x - 1][y] == 0){step(x - 1, y);}
49 
50     maze[x][y] = 0;
51 }
52 
53 void print_maze()
54 {
55     int x, y;
56 
57     for(x = 0; x < LEN; x++)
58     {
59         for(y = 0; y < LEN; y++)
60         {
61             if(maze[x][y] == 2)
62                 printf("");
63             else if(maze[x][y] == 1) 
64                 printf("");
65             else if(maze[x][y] == 0)
66                 printf("");    
67         }
68         printf("\n");
69     }
70     
71     printf("\n");
72 }

 

歡迎轉載,請備注原始連接http://www.cnblogs.com/liuliuliu/p/3885099.html,並注明轉載。

作者bibibi_liuliu,聯系方式395985239@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM