走迷宮 簡要題解

2022-09-19 08:57:09 字數 2168 閱讀 1906

走迷宮,帶起點終點 .

有傳送門,傳送門個數不超過 \(26\) 個 .

不會 .

我們可以考慮把每個點能到的點連邊 .

二維壓到一維,常見 trick .

於是我們有乙個很顯然的想法:點到傳送門連 \(0\) 權值的邊 .

但是這樣是錯的,因為我們經過傳送門必須得進去 .

紅色是邊,藍色是最短路 .

於是如果乙個點能到傳送門,我們就直接把傳送門能到的點和它連邊,這樣就好了 .

注意要嚴格連單向邊 .

這樣每條邊的權值就都是 \(1\) 了,bfs 也能求最短路了 .

顯式建圖的 bfs 顯然跑不過直接 bfs 啊/kk

#include #include #include #include #include #include #include #include #include #include #include #define file(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);

using namespace std;

typedef pairpii;

const int rn = 333, n = rn*rn, dx = , dy = ;

vectorg[n];

string s;

int n, m, dis[n];

bool vis[n], v[rn][rn];

maptmp;

mapportal;

pii st, ed;

inline void addedge(int u, int v, int w)

inline void ade(int u, int v, int w)

struct node

inline bool operator

};void dijkstra(int s)

} }}int trans(pii _)

int main()

} }for (int i=1; i<=n; i++)

for (int j=1; j<=m; j++)

}dijkstra(trans(st));

if (dis[trans(ed)] == dis[0]) puts("-1");

else printf("%d\n", dis[trans(ed)]);

return 0;

}

#include #include #include #include #include #include #include #include #include #include #include #define file(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);

using namespace std;

typedef pairpii;

const int rn = 333, n = rn*rn, dx = , dy = ;

vectorg[n];

string s;

int n, m, dis[n];

bool vis[n], v[rn][rn];

maptmp;

mapportal;

pii st, ed;

inline void addedge(int u, int v)

inline void ade(int u, int v)

struct node

inline bool operator

};void bfs(int s) }}

int trans(pii _)

int main()

} }for (int i=1; i<=n; i++)

for (int j=1; j<=m; j++)

}bfs(trans(st));

if (dis[trans(ed)] == dis[0]) puts("-1");

else printf("%d\n", dis[trans(ed)]);

return 0;

}

走迷宮求最小步數題解

問題描述 第一行輸入兩個數,分別是迷宮的行數和列數,第二行輸入1和0,1表示可以走,0不能走輸出乙個數,表示迷宮的最少步數。遇到的問題 向函式傳到二維陣列時,超過了的傳到二維陣列上限,1000時不行,100可以 思路 基於非遞迴的廣度搜尋,從入口處,用佇列收割入口位置的下標,把乙個位置的所有能走的下...

走迷宮演算法

從起點問題的提出 在遊戲地圖中,如何尋找一條從起點到終點的最短行路線路?資料表達 使用m n大小的byte陣列 來表示地圖,每個位置的狀態用0表示可走,1表示牆,2表示起點,3表示終點,128表示路徑 行走規則有兩種 4方向行走規則 只能從當前點向上,下,左,右 這4個方向行走 8方向行走規則 可以...

老鼠走迷宮

說明 老鼠走迷宮是遞迴求解的基本題型,我們在二維陣列中使用2表示迷宮牆壁,使用1來表示老鼠的行走路徑,試以程式求出由入口至出口的路徑。解法 老鼠的走法有上 左 下 右四個方向,在每前進一格之後就選乙個方向前進,無法前進時退回選擇下乙個可前進方向,如此在陣列中依序測試四個方向,直到走到出口為止,這是遞...