nowcoder最喜歡遊樂場的迷宮遊戲,他和小夥伴們比賽誰先走出迷宮。現在把迷宮的地圖給你,你能幫他算出最快走出迷宮需要多少步嗎?
輸入包含多組資料。每組資料報含乙個10*10,由「#」和「.」組成的迷宮。其中「#」代表牆;「.」代表通路。
入口在第一行第二列;出口在最後一行第九列。
從任意乙個「.」點都能一步走到上下左右四個方向的「.」點。
對應每組資料,輸出從入口到出口最短需要幾步。示例1
#.#########........#
#........#
#........#
#........#
#........#
#........#
#........#
#........#
########.#
#.########
#........#
########.#
#........#
#.########
#........#
########.#
#........#
#.######.#
########.#
1630
思路:從起始位置出發,進行上下左右的深度搜尋,每次搜尋到一條路徑,就和上一次搜尋的路徑比較取較小者,具體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 那麼您將獲得一系列公司贊助的黑客馬拉松,員工,社群成員,學生和其他人員在乙個週末聚會在一起,以利用開放源 工具 包...