時限: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,求出電子老鼠最少要幾步從起點走到終點。輸入 本題包含乙個測例。在測例的第一行有四個由空格分隔的整...