Icarus 一道有趣的題 走出迷宮

2021-09-11 03:23:07 字數 1678 閱讀 9878

看**的時候突然想起來了以前學李戈老師的《c程式設計高階》裡面的這道題,然後在eclipse裡找了找,翻到了原來寫過的這個**,重新又看了一遍。

感謝那個時候的自己,注釋加了不少。這算是彼時最初接觸程式設計的我遇到的第一道真正演算法意義上的難題(當時我還沒學資料結構),想了很久想不出來,然後上網搜,倒是搜到不少人的**,可惜沒有注釋根本看不懂(有注釋說不定也看不懂,畢竟要用廣搜)。後來還是搜尋迷宮類問題找到了一篇詳細講深搜廣搜的帖子才勉強把**試著擼了起來。

當初徹底搞懂之後的感想:

如今:

到poj上重新找到了這題,提交了一下,嗯,ac。

附上題目和**:

總時間限制: 

1000ms

記憶體限制: 

65536kb

描述當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。 

假設你已經得到了乙個n*m的迷宮的圖紙,請你找出從起點到出口的最短路。

輸入第一行是兩個整數n和m(1<=n,m<=100),表示迷宮的行數和列數。

接下來n行,每行乙個長為m的字串,表示整個迷宮的布局。字元'.'表示空地,'#'表示牆,'s'表示起點,'t'表示出口。

輸出輸出從起點到出口最少需要走的步數。

樣例輸入

3 3

s#t.#.

...

樣例輸出

6
/*

* outofthemaze.cpp

* * created on: 2023年10月30日

* author: arno

* */

#include#includeusing namespace std;

struct node;

int n,m;

char maze[100][100];

//檢查探索得到的下一步是否合法,若在陣列範圍內且可以通過的話就合法,否則非法

bool isvalid(node vx),,,};//四個方向,用二維陣列作為座標改變值探索當前座標的上下左右四個方向

q.push(vs);//開始結點入隊

maze[vs.x][vs.y]='#';//標記已訪問,不再繼續訪問

while(!q.empty())

if(isvalid(vw))

} }return false;

}int main()

else if(maze[i][j]=='t')

} }if(bfs(start,end));

char a[102][102];

queueque;

struct obj start,destination;

int dx[4]=;//上右下左

int dy[4]=;

int main(int argc, char *ar**)}}

printf("%d\n",destination.step);

return 0;

}*/

一道有趣的演算法題

日前在網上看到一道演算法題。頗有意思,也細細的研究一番。現將該題發布於此,和各位交流一下。同時,本文也是筆者首次使用office2007的部落格功能,看看效果怎麼樣。某幢大樓有100層。你手裡有兩顆一模一樣的玻璃珠。當你拿著玻璃珠在某一層往下扔的時候,一定會有兩個結果,玻璃珠碎了或者沒碎。這幢大樓有...

一道有趣的構造題

題意 以下是三道證明題,均在平面上進行討論。以下 x0 y0 x1 y1 x 0,y 0 x 1,y 1 x0 y 0 x1 y1 表示一條從 x0 y0 x 0,y 0 x0 y 0 到 x1 y1 x 1,y 1 x1 y 1 的直線。其中,一條直線與乙個點集合相交表示這條直線上存在乙個點,這個...

一道有趣的非同步題

const delay ms new promise resolve settimeout resolve,ms const subflow createflow delay 1000 then log c createflow log a log b subflow,delay 1000 then...