close
C++來看迷宮問題
老鼠走迷宮是個程碼人會遇到的問題,對於新手來說用腦子想就相當簡單,換成程式碼就變成阿呆。
如果你是阿呆請來看看怎麼寫才好~~
在迷宮的行進,請遵守三個原則:
- 一次只能走一個(也有特殊題目,EX:大富翁遊戲那種啦,丟骰子的看走幾步)
- 遇到牆無法往前走時,則退回一步找看看是否有其他路可以走
- 走過的路不會再走第二次
- #include <iostream>
- #include <stdio.h>
- #include <stdlib.h>
- #define EAST MAZE[x][y+1]
- #define WEST MAZE[x][y-1]
- #define SOUTH MAZE[x+1][y]
- #define NORTH MAZE[x-1][y]
- #define ExitX 8
- #define ExitY 10
- using namespace std;
- struct list{
- int x,y;//座標
- struct list* next;
- };
- typedef struct list node;
- typedef node * link;
- int MAZE[10][12] = {1,1,1,1,1,1,1,1,1,1,1,1,
- 1,0,0,0,1,1,1,1,1,1,1,1,
- 1,1,1,0,1,1,0,0,0,0,1,1,
- 1,1,1,0,1,1,0,1,1,0,1,1,
- 1,1,1,0,0,0,0,1,1,0,1,1,
- 1,1,1,0,1,1,0,1,1,0,1,1,
- 1,1,1,0,1,1,0,1,1,0,1,1,
- 1,1,1,1,1,1,0,1,1,0,1,1,
- 1,1,0,0,0,0,0,0,1,0,0,1,
- 1,1,1,1,1,1,1,1,1,1,1,1};
- link push(link stack,int x,int y);
- link pop(link stack,int *x,int *y);
- int chkExit(int x,int y,int ex,int ey);
- int main()
- {
- int i,j,x,y;
- link path = NULL;
- x=1;
- y=1;
- for(i=0;i<10;i++)
- {
- for(j=0;j<12;j++)
- cout << " " << MAZE[i][j];
- cout << endl;
- }
- while(x<=ExitX&&y<=ExitY)
- {
- MAZE[x][y] = 2;
- if(NORTH==0)
- {
- x-=1;
- path = push(path,x,y);
- }
- else if(SOUTH==0)
- {
- x+=1;
- path = push(path,x,y);
- }
- else if(WEST==0)
- {
- y-=1;
- path = push(path,x,y);
- }
- else if(EAST==0)
- {
- y+=1;
- path = push(path,x,y);
- }
- else if(chkExit(x,y,ExitX,ExitY)==1)
- break;
- else
- {
- MAZE[x][y]==2;
- path = pop(path,&x,&y);
- }
- }
- for(i=0;i<10;i++)
- {
- for(j=0;j<12;j++)
- cout << " " << MAZE[i][j];
- cout << endl;
- }
- return 0;
- }
- link push(link stack,int x,int y)
- {
- link newnode;
- newnode = (link)malloc(sizeof(node));
- newnode->x=x;
- newnode->y=y;
- newnode->next=stack;
- stack = newnode;
- return stack;
- }
- link pop(link stack,int *x,int *y)
- {
- link top;
- if(stack!=NULL)
- {
- top = stack;
- stack = stack->next;
- *x = top->x;
- *y = top->y;
- free(top);
- return stack;
- }
- else
- *x = -1;
- return stack;
- }
- int chkExit(int x,int y,int ex,int ey)
- {
- if(x==ex&&y==ey)
- {
- if(NORTH==1||SOUTH==1||WEST==1||EAST==2)
- return 1;
- if(NORTH==1||SOUTH==1||WEST==2||EAST==2)
- return 1;
- if(NORTH==1||SOUTH==2||WEST==1||EAST==2)
- return 1;
- if(NORTH==2||SOUTH==1||WEST==1||EAST==2)
- return 1;
- }
- return 0;
- }
全站熱搜