close

C++來看迷宮問題

老鼠走迷宮是個程碼人會遇到的問題,對於新手來說用腦子想就相當簡單,換成程式碼就變成阿呆。

如果你是阿呆請來看看怎麼寫才好~~

在迷宮的行進,請遵守三個原則:

  1. 一次只能走一個(也有特殊題目,EX:大富翁遊戲那種啦,丟骰子的看走幾步)
  2. 遇到牆無法往前走時,則退回一步找看看是否有其他路可以走
  3. 走過的路不會再走第二次
  1. #include <iostream>  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #define EAST MAZE[x][y+1]  
  5. #define WEST MAZE[x][y-1]  
  6. #define SOUTH MAZE[x+1][y]  
  7. #define NORTH MAZE[x-1][y]  
  8. #define ExitX 8  
  9. #define ExitY 10  
  10.   
  11. using namespace std;  
  12.   
  13. struct list{  
  14.     int x,y;//座標  
  15.     struct list* next;  
  16. };  
  17. typedef struct list node;  
  18. typedef node * link;  
  19. int MAZE[10][12] = {1,1,1,1,1,1,1,1,1,1,1,1,  
  20.                     1,0,0,0,1,1,1,1,1,1,1,1,  
  21.                     1,1,1,0,1,1,0,0,0,0,1,1,  
  22.                     1,1,1,0,1,1,0,1,1,0,1,1,  
  23.                     1,1,1,0,0,0,0,1,1,0,1,1,  
  24.                     1,1,1,0,1,1,0,1,1,0,1,1,  
  25.                     1,1,1,0,1,1,0,1,1,0,1,1,  
  26.                     1,1,1,1,1,1,0,1,1,0,1,1,  
  27.                     1,1,0,0,0,0,0,0,1,0,0,1,  
  28.                     1,1,1,1,1,1,1,1,1,1,1,1};  
  29. link push(link stack,int x,int y);  
  30. link pop(link stack,int *x,int *y);  
  31. int chkExit(int x,int y,int ex,int ey);  
  32.   
  33. int main()  
  34. {  
  35.     int i,j,x,y;  
  36.     link path = NULL;  
  37.     x=1;  
  38.     y=1;  
  39.     for(i=0;i<10;i++)  
  40.     {  
  41.         for(j=0;j<12;j++)  
  42.             cout << " " << MAZE[i][j];  
  43.         cout << endl;  
  44.     }  
  45.     while(x<=ExitX&&y<=ExitY)  
  46.     {  
  47.         MAZE[x][y] = 2;  
  48.         if(NORTH==0)  
  49.         {  
  50.             x-=1;  
  51.             path = push(path,x,y);  
  52.         }  
  53.         else if(SOUTH==0)  
  54.         {  
  55.             x+=1;  
  56.             path = push(path,x,y);  
  57.         }  
  58.         else if(WEST==0)  
  59.         {  
  60.             y-=1;  
  61.             path = push(path,x,y);  
  62.         }  
  63.         else if(EAST==0)  
  64.         {  
  65.             y+=1;  
  66.             path = push(path,x,y);  
  67.         }  
  68.         else if(chkExit(x,y,ExitX,ExitY)==1)  
  69.             break;  
  70.         else  
  71.         {  
  72.             MAZE[x][y]==2;  
  73.             path = pop(path,&x,&y);  
  74.         }  
  75.     }  
  76.     for(i=0;i<10;i++)  
  77.     {  
  78.         for(j=0;j<12;j++)  
  79.             cout << " " << MAZE[i][j];  
  80.         cout << endl;  
  81.   
  82.     }  
  83.     return 0;  
  84. }  
  85. link push(link stack,int x,int y)  
  86. {  
  87.     link newnode;  
  88.     newnode = (link)malloc(sizeof(node));  
  89.     newnode->x=x;  
  90.     newnode->y=y;  
  91.     newnode->next=stack;  
  92.     stack = newnode;  
  93.     return stack;  
  94. }  
  95. link pop(link stack,int *x,int *y)  
  96. {  
  97.     link top;  
  98.     if(stack!=NULL)  
  99.     {  
  100.         top = stack;  
  101.         stack = stack->next;  
  102.         *x = top->x;  
  103.         *y = top->y;  
  104.         free(top);  
  105.         return stack;  
  106.     }  
  107.     else  
  108.         *x = -1;  
  109.     return stack;  
  110. }  
  111. int chkExit(int x,int y,int ex,int ey)  
  112. {  
  113.     if(x==ex&&y==ey)  
  114.     {  
  115.         if(NORTH==1||SOUTH==1||WEST==1||EAST==2)  
  116.             return 1;  
  117.         if(NORTH==1||SOUTH==1||WEST==2||EAST==2)  
  118.             return 1;  
  119.         if(NORTH==1||SOUTH==2||WEST==1||EAST==2)  
  120.             return 1;  
  121.         if(NORTH==2||SOUTH==1||WEST==1||EAST==2)  
  122.             return 1;  
  123.     }  
  124.     return 0;  
  125. }
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 佑佑 的頭像
    佑佑

    佑佑的語言

    佑佑 發表在 痞客邦 留言(0) 人氣()