關於迷宮的演算法

2021-04-12 23:00:22 字數 4621 閱讀 9884

//base.h

#include

#include

#include

#define overflow -2

#define ok 1

#define error 0

#define true 1

#define false 0

typedef int status;

//stack.h

#define stack_init_size 100 //儲存空間初始量

#define stack_increment 10//儲存空間初始增量

typedef struct

posttype;//座標位置  迷宮的r行c列

typedef struct

selemtype;//棧元素的型別

typedef struct

stack;//棧的型別

status initstack(stack &s)//初始化棧

//initstack

status stackempty(stack s)

//判斷棧是否為空,如果為空返回true,否則返回false

//stackempty

status push(stack &s,selemtype e)

//插入元素為e的棧頂元素

*s.top++=e;

return ok;

}//push

status pop(stack &s,selemtype &e)

//刪除棧頂元素存入e

//pop

status destroystack(stack &s)

//銷毀棧

//destroystack

//maze.cpp

#define maxlen 20//迷宮包括外牆最大行列數目

typedef structmazetype;   //迷宮型別

status initmaze(mazetype &maze)//for

for(i=0;i<=maze.r+1;i++)

for(i=1;i<=maze.r;i++)

for(j=1;j<=maze.c;j++)

maze.adr[i][j]=' ';//初始化迷宮

printf("輸入障礙物%d的座標(以座標(0,0)結束輸入): ",k);

scanf("%d%d",&m,&n);//接收障礙的座標

k++;

while(m!=0)

return ok;

}//initmaze        

status pass(mazetype maze,posttype curpos)//pass

status footprint(mazetype &maze,posttype curpos)//footprint

posttype nextpos(posttype &curpos,int i)

return cpos;

}//nextpos

status markprint(mazetype &maze,posttype curpos)//markprint

void printmaze(mazetype &maze)

//將最後標記好的迷宮輸出

}//printmaze

status mazepath(mazetype &maze,posttype start,posttype end)

//若迷宮從入口start到end的通道則求得一條存放在棧中

else

}//if

else//當前位置不能通過

if(e.di<4)//換下乙個方向探索  設定當前位置為該新方向上的鄰位 

}//if

}}while(!stackempty(s));

if(!destroystack(s))

exit(error);

else return false;

}//mazepath

void main()

dowhile (start.r>maze.r || start.c>maze.c);

dowhile (end.r>maze.r || end.c>maze.c);

if(!mazepath(maze,start,end))

printf("/n不能找到一條路徑!!!/n");

else printmaze(maze);//輸出迷宮

printf("是否要繼續?(y/n):");

scanf("%s",&c);

}while (c=='y' || c=='y');

}//main//base.h

#include

#include

#include

#define overflow -2

#define ok 1

#define error 0

#define true 1

#define false 0

typedef int status;

//stack.h

#define stack_init_size 100 //儲存空間初始量

#define stack_increment 10//儲存空間初始增量

typedef struct

posttype;//座標位置  迷宮的r行c列

typedef struct

selemtype;//棧元素的型別

typedef struct

stack;//棧的型別

status initstack(stack &s)//初始化棧

//initstack

status stackempty(stack s)

//判斷棧是否為空,如果為空返回true,否則返回false

//stackempty

status push(stack &s,selemtype e)

//插入元素為e的棧頂元素

*s.top++=e;

return ok;

}//push

status pop(stack &s,selemtype &e)

//刪除棧頂元素存入e

//pop

status destroystack(stack &s)

//銷毀棧

//destroystack

//maze.cpp

#define maxlen 20//迷宮包括外牆最大行列數目

typedef structmazetype;   //迷宮型別

status initmaze(mazetype &maze)//for

for(i=0;i<=maze.r+1;i++)

for(i=1;i<=maze.r;i++)

for(j=1;j<=maze.c;j++)

maze.adr[i][j]=' ';//初始化迷宮

printf("輸入障礙物%d的座標(以座標(0,0)結束輸入): ",k);

scanf("%d%d",&m,&n);//接收障礙的座標

k++;

while(m!=0)

return ok;

}//initmaze        

status pass(mazetype maze,posttype curpos)//pass

status footprint(mazetype &maze,posttype curpos)//footprint

posttype nextpos(posttype &curpos,int i)

return cpos;

}//nextpos

status markprint(mazetype &maze,posttype curpos)//markprint

void printmaze(mazetype &maze)

//將最後標記好的迷宮輸出

}//printmaze

status mazepath(mazetype &maze,posttype start,posttype end)

//若迷宮從入口start到end的通道則求得一條存放在棧中

else

}//if

else//當前位置不能通過

if(e.di<4)//換下乙個方向探索  設定當前位置為該新方向上的鄰位 

}//if

}}while(!stackempty(s));

if(!destroystack(s))

exit(error);

else return false;

}//mazepath

void main()

dowhile (start.r>maze.r || start.c>maze.c);

dowhile (end.r>maze.r || end.c>maze.c);

if(!mazepath(maze,start,end))

printf("/n不能找到一條路徑!!!/n");

else printmaze(maze);//輸出迷宮

printf("是否要繼續?(y/n):");

scanf("%s",&c);

}while (c=='y' || c=='y');

}//main

a 演算法迷宮 c 迷宮中的老鼠

之前我們已經討論了採用回溯 backtracking 方法來解決西洋棋中馬的遍歷問題。為了讓大家更加熟悉回溯方法,我們將在後面的課程中再分析幾個例子。今天先看乙個使用回溯方法解決老鼠走迷宮的問題。下圖是乙個迷宮,其中塗上灰色的方格,老鼠不能進入,請找出老鼠從起點到終點的線路。老鼠只能向兩個方向移動 ...

關於迷宮的路徑輸出

怕 會有忽略所以全發了上來,麻煩各位 不知道為什麼,總是無法輸出尋得的路徑,用printf 檢測無法進入if i g utexit.x j g utexit.y 中 include include include include include include 匯入聲音標頭檔案 include pr...

求迷宮的的演算法

include include include include include include define maxn 100 using namespace std int q maxn maxn int maze maxn maxn fa maxn maxn vis maxn maxn dist...