程式設計馬拉松 走迷宮

2021-08-07 17:33:16 字數 1748 閱讀 5336

nowcoder最喜歡遊樂場的迷宮遊戲,他和小夥伴們比賽誰先走出迷宮。現在把迷宮的地圖給你,你能幫他算出最快走出迷宮需要多少步嗎?

輸入包含多組資料。

每組資料報含乙個10*10,由「#」和「.」組成的迷宮。其中「#」代表牆;「.」代表通路。

入口在第一行第二列;出口在最後一行第九列。

從任意乙個「.」點都能一步走到上下左右四個方向的「.」點。

對應每組資料,輸出從入口到出口最短需要幾步。
示例1

#.########

#........#

#........#

#........#

#........#

#........#

#........#

#........#

#........#

########.#

#.########

#........#

########.#

#........#

#.########

#........#

########.#

#........#

#.######.#

########.#

16

30

思路:從起始位置出發,進行上下左右的深度搜尋,每次搜尋到一條路徑,就和上一次搜尋的路徑比較取較小者,具體ac**如下

#include#includeusing namespace std;

char s[10][10];//字元陣列

int a[10][10];//標記矩陣

int minlen;//最短路徑

int totallen;//當前的路徑長度

int min(int a,int b)//求取兩者中的最小值函式

void dfs(int x,int y)//從起點第一行第二列出發深搜

if(s[x][y]=='#') return;//遇到#號停止搜素

if(minlen<=totallen) return;//找到一條路徑的長度總和已經超過當前的已經找到的最短路徑,則返回

a[x][y]=1;//標記此位置已經被訪問

totallen++;//路徑加一

if(x-1>=0 && s[x-1][y]=='.' && !a[x-1][y]) dfs(x-1,y);//向上搜尋

if(x+1<10 && s[x+1][y]=='.' && !a[x+1][y]) dfs(x+1,y);//向下搜尋

if(y-1>=0 && s[x][y-1]=='.' && !a[x][y-1]) dfs(x,y-1);//向右搜尋

if(y+1<10 && s[x][y+1]=='.' && !a[x][y+1]) dfs(x,y+1);//向左搜尋

totallen--;//回退(回溯)

a[x][y]=0;//回退

}int main()

{ while(~scanf("%s",s[0]))

{ for(int i=1;i<10;i++) scanf("%s",s[i]);//處理輸入

minlen=1<<30;//先將最小值賦值很大,用到左移的位運算

totallen=0;//將走過路徑長度置零

memset(a,0,sizeof(a));//將標記陣列設定為未訪問,未訪問為零

dfs(0,1);//呼叫深搜函式,開始計算

cout<

ACM程式設計之馬拉松競賽

題目描述 校acm協會近四個月舉行了為期100天acm程式設計之馬拉松競賽,競賽題總數為1000,同學們反響熱烈,先後有許多acm程式設計競賽愛好者報名,這些選手按報名時間從1開始先後編號,成功解答的題目數為選手的成績。今天進行成績統計和頒獎儀式,已知按編號排序的選手成績 各不相同 根據給定標準成績...

人工智慧程式設計馬拉松

大賽介紹 雲計算 大資料的成熟催化了人工智慧 ai 的進步與飛速發展,使得機器能夠在很大程度上模擬人的功能,實現批量人性化和個性化的服務客戶,這為深處服務價值鏈高階的金融業帶來深刻影響,ai將成為銀行與客戶溝通中發現客戶金融需求的重要因素。百業之母的金融行業,呼叫中心作為對外交流的巨大視窗,語音資料...

黑客馬拉松題目 舉辦黑客馬拉松的提示

黑客馬拉松題目 當您合併一家全球金融服務,和資料公司時,您會得到什麼呢?該公司雇用了5,000名軟體開發人員,而這些軟體開發人員的創始人都是慈善事業的創始人。如果您是bloomberg 那麼您將獲得一系列公司贊助的黑客馬拉松,員工,社群成員,學生和其他人員在乙個週末聚會在一起,以利用開放源 工具 包...