電子老鼠闖迷宮(廣度優先演算法bfs)

2021-07-24 13:38:01 字數 1976 閱讀 9538

時限:1000ms 記憶體限制:10000k  總時限:3000ms

描述有乙隻電子老鼠被困在如下圖所示的迷宮中。這是乙個12*12單元的正方形迷宮,黑色部分表示建築物,白色部分是路。電子老鼠可以在路上向上、下、左、右行走,每一步走乙個格仔。現給定乙個起點s和乙個終點t,求出電子老鼠最少要幾步從起點走到終點。

輸入本題包含乙個測例。在測例的第一行有四個由空格分隔的整數,分別表示起點的座標s(x.y)和終點的座標t(x,y)。從第二行開始的12行中,每行有12個字元,描述迷宮的情況,其中'x'表示建築物,'.'表示路.

輸出輸出乙個整數,即電子老鼠走出迷宮至少需要的步數。

輸入樣例

2 9 11 8

************

x......x.***

x.x.xx.....x

x.x.xx.***.x

x.x.....x..x

x.*********x

x...x.x....x

x.***...***x

x.....x....x

***.***x.x.x

******x..***

************

輸出樣例

#include #include //下面用到queue,所以這裡定義一下頭檔案

using namespace std;

int sx, sy; //初始點的座標,與直角座標系略有不同,(sx, sy)表示點在第sx行,第sy列

int dx, dy; //目標點的座標

char maze[13][13]; //12 * 12 迷宮 ,陣列開成13*13是因為,我們main函式裡是從1開始到12,方便理解,所以要把陣列原來的0的地方也定義,相當於我們定義成13*13,卻只用了12*12的部分

int visited[13][13]; //定義visited陣列,指示maze中的點我們是不是擴充套件過,如果擴充套件過我們就不必再擴充套件,防止迴圈擴充套件或做重複的工作

int dire[4][2] = , , , }; //dire陣列是用來定義方向的,分別是上,左,下,右順時針。如果點要向下擴充套件,就需要將點的座標加上向下方向的對應分量

typedef struct node //定義乙個結構體,用來儲存maze的每乙個格仔

node;

node::node(int x1, int y1) //建構函式放在結構體外面定義,也可放在裡面

int bfs() //廣度優先搜尋,即將當前樹的節點按層數從上到下按順序都遍歷到

for(int i = 0; i < 4; i++) //從四個方向依次找可以擴充套件的節點,找到就加進佇列}}

return -1; //這裡最好寫上這句話,因為如果上面佇列中的節點找完之後還是不能找到,那麼函式就從這裡出去,並返回乙個-1,提示沒有找到,即從起始點到不了目標點

}int main()

}cout << bfs() << endl; //呼叫廣搜函式

return 0;

}

電子老鼠闖迷宮

有乙隻電子老鼠被困在如下圖所示的迷宮中。這是乙個12 12單元的正方形迷宮,黑色部分表示建築物,白色部分是路。電子老鼠可以在路上向上 下 左 右行走,每一步走乙個格仔。現給定乙個起點s和乙個終點t,求出電子老鼠最少要幾步從起點走到終點。輸入 本題包含乙個測例。在測例的第一行有四個由空格分隔的整數,分...

1042 電子老鼠闖迷宮

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 有乙隻電子老鼠被困在如下圖所示的迷宮中。這是乙個12 12單元的正方形迷宮,黑色部分表示建築物,白色部分是路。電子老鼠可以在路上向上 下 左 右行走,每一步走乙個格仔。現給定乙個起點s和乙個終點t,求出電子老鼠最少要幾步從起點...

NOJ1042 演算法實驗三 電子老鼠闖迷宮

描述 有乙隻電子老鼠被困在如下圖所示的迷宮中。這是乙個12 12單元的正方形迷宮,黑色部分表示建築物,白色部分是路。電子老鼠可以在路上向上 下 左 右行走,每一步走乙個格仔。現給定乙個起點s和乙個終點t,求出電子老鼠最少要幾步從起點走到終點。輸入 本題包含乙個測例。在測例的第一行有四個由空格分隔的整...