迷宮問題BFS暴搜

2021-06-11 01:54:25 字數 2363 閱讀 3683

首先宣告的是這個問題的**並不是本人所做,我只是抱著學習的態度,在此標記如下**。

「迷宮」題:從圖左邊入口處的2011進去,在迷宮裡轉悠,最後變成2012從右邊出來。可以在迷宮裡轉圈,可以重複之前走過的路,但不能回退。

#include #include #include #define startvalue 2011 

#define endvalue 2012

#define queuesize (1024*1024) //size of the queue for bfs

//四種狀態:start指當前節點前進方向是start入口方向

// middle指當前節點所前進方向是middle中間口方向

// end指當前節點所前進方向是end出口方向

// unreachable狀態只在計算下一擴充套件節點方向時使用用以說明由當前節點到下一節點是達不到的

typedef enumstate;

//五種操作:add +7,min -5 ,mul *3 ,div /2 ,other 只在初始節點是使用,用以記錄當前節點是在什麼操作下得到的

typedef enumopera;

//節點資訊:記錄當前節點的父節點,節點當前值,節點是通過父節點經過什麼操作得到,當前節點的前進方向,當前節點的派生後繼

typedef struct node*quadtree;

//bfs樹的根節點

quadtree root;

//初始化新派生後繼節點的函式

node * newnode(int v, node* n,int p, state s)

//儲存一出現節點佇列資料結構:節點指標,佇列頭,佇列尾,佇列大小

struct queuenodequeue;

//初始化祖先節點佇列

void initqueue()

void enqueue(node * q)

nodequeue.data[nodequeue.tailer] = q;

nodequeue.tailer = (nodequeue.tailer+1)%nodequeue.size;

}node* dequeue()

node* popstack()

int add(int temp)

int minus(int temp)

int mul(int temp)

int div(int temp)

int (*fun[4])(int) =; //function pointer

//three-dimensional matrice: according to [state], [path], [next operation] return [next state]

state statecompute[3][5][4]=,

, ,

, }, ,

, ,

, }, ,

, ,

, }};

void outputresult(node* end)

while((end=popstack())!=null)

printf("%d\t%d%c%c=%d\n",++i,end->parent->value,opera[2*end->path],opera[1+2*end->path],end->value);

}#define bit_set(x,n) (x=x | (0x01<>3的空間

//3 代表三種狀態(即節點指向)start,middle,end

//4 代表四種操作 add,minur,multiply,div

//maxvalue 代表當前節點允許的最大狀態值

//右移3位原因在於乙個char型的儲存空間為8位

//具體判重操作時,以上的3,4,maxvalue相當於三個權值,對應任意乙個可能出現的狀態節點我們採取如下操作

//(node->state*4*maxvalue>>3)+(node->path*maxvalue>>3)+(node->value>>3)使得每個狀態節點被唯一的標記成一位

廣搜bfs 迷宮問題 三S

定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...

POJ 3984迷宮問題(BFS廣搜)

題目貼上 相對於求最短路徑長度的題目,這道題目可能稍微難一點點,因為它要求輸出最短的所有路徑點 思路 定義乙個結構體,有此時遍歷點的x,y座標和該點的父親點 意思就是你的上乙個狀態 比如一條路徑是 0,0 1,1 2,2 則點 2,2 的父親點是 1,1 我們將有父親點的點輸出,沒有父親點的點不輸出...

5 逃離迷宮(bfs 寬搜 )

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...