日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1377. T 秒后青蛙的位置(BFS)

發(fā)布時(shí)間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1377. T 秒后青蛙的位置(BFS) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 題目

給你一棵由 n 個(gè)頂點(diǎn)組成的無(wú)向樹(shù),頂點(diǎn)編號(hào)從 1 到 n。青蛙從 頂點(diǎn) 1 開(kāi)始起跳。規(guī)則如下:

  • 在一秒內(nèi),青蛙從它所在的當(dāng)前頂點(diǎn)跳到另一個(gè) 未訪問(wèn) 過(guò)的頂點(diǎn)(如果它們直接相連)。
  • 青蛙無(wú)法跳回已經(jīng)訪問(wèn)過(guò)的頂點(diǎn)。
  • 如果青蛙可以跳到多個(gè)不同頂點(diǎn),那么它跳到其中任意一個(gè)頂點(diǎn)上的機(jī)率都相同。
  • 如果青蛙不能跳到任何未訪問(wèn)過(guò)的頂點(diǎn)上,那么它每次跳躍都會(huì)停留在原地。

無(wú)向樹(shù)的邊用數(shù)組 edges 描述,其中 edges[i] = [fromi, toi] 意味著存在一條直接連通 fromi 和 toi 兩個(gè)頂點(diǎn)的邊。

返回青蛙在 t 秒后位于目標(biāo)頂點(diǎn) target 上的概率。

示例 1:

輸入:n = 7, edges = [[1,2],[1,3],[1,7],[2,4],[2,6],[3,5]], t = 2, target = 4 輸出:0.16666666666666666 解釋:上圖顯示了青蛙的跳躍路徑。青蛙從頂點(diǎn) 1 起跳,第 1 秒 有 1/3 的概率跳到頂點(diǎn) 2 , 然后第 2 秒 有 1/2 的概率跳到頂點(diǎn) 4, 因此青蛙在 2 秒后位于頂點(diǎn) 4 的概率是 1/3 * 1/2 = 1/6 = 0.16666666666666666 。 提示: 1 <= n <= 100 edges.length == n-1 edges[i].length == 2 1 <= edges[i][0], edges[i][1] <= n 1 <= t <= 50 1 <= target <= n 與準(zhǔn)確值誤差在 10^-5 之內(nèi)的結(jié)果將被判定為正確。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/frog-position-after-t-seconds
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 廣度優(yōu)先搜索
class Solution { public:double frogPosition(int n, vector<vector<int>>& edges, int t, int target) {if(n==1)return 1.0;//一個(gè)點(diǎn)if(target == 1)//多個(gè)點(diǎn),最終目標(biāo)不可能在1return 0;bool visited[n+1] = {false};queue<pair<int,double>> q;//idx, 概率int size, count;pair<int,double> tp;double prob = 1;bool found = false, noway = true;q.push({1,1.0});visited[1] = true;while(!q.empty()){size = q.size();t--;while(size--){tp = q.front();q.pop();count = 0;//tp連接著多少個(gè)未訪問(wèn)的點(diǎn)for(auto& e : edges){if((e[0] == tp.first && !visited[e[1]]) || (e[1]==tp.first && !visited[e[0]]) ){if(e[1] == target || e[0] == target)found = true;//找到 targetcount++;//計(jì)數(shù)}}for(auto& e : edges){if((e[0] == tp.first && !visited[e[1]]) || (e[1]==tp.first && !visited[e[0]]) ){ //將連接的點(diǎn)加入隊(duì)列,并計(jì)算概率if(!visited[e[1]]){q.push({e[1], tp.second/count});visited[e[1]] = true;}else{q.push({e[0], tp.second/count});visited[e[0]] = true;};// 如果是 target,獲取答案概率if(e[1] == target || e[0] == target)prob = tp.second/count;}}noway = true;//target 下面還有連接點(diǎn)嗎?if(found){for(auto& e : edges){if(((e[0] == target && !visited[e[1]]))||(e[1]==target && !visited[e[0]])){ //有未訪問(wèn)的,則有路noway = false;break;}}}}if(found){if(t==0)//時(shí)間到了,剛好找到return prob;else if(t < 0)//時(shí)間不夠,不可能到達(dá)return 0;else //時(shí)間夠{if(noway)//沒(méi)有路,青蛙停留在targetreturn prob;return 0;//有路,青蛙肯定走過(guò)去了,在target 概率 0}}}return prob;} };

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1377. T 秒后青蛙的位置(BFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。