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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

1. 題目

給你一棵由 n 個頂點組成的無向樹,頂點編號從 1 到 n。青蛙從 頂點 1 開始起跳。規(guī)則如下:

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

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

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

示例 1:

輸入:n = 7, edges = [[1,2],[1,3],[1,7],[2,4],[2,6],[3,5]], t = 2, target = 4 輸出:0.16666666666666666 解釋:上圖顯示了青蛙的跳躍路徑。青蛙從頂點 1 起跳,第 1 秒 有 1/3 的概率跳到頂點 2 , 然后第 2 秒 有 1/2 的概率跳到頂點 4, 因此青蛙在 2 秒后位于頂點 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é)果將被判定為正確。

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

2. 解題

  • 廣度優(yōu)先搜索
class Solution { public:double frogPosition(int n, vector<vector<int>>& edges, int t, int target) {if(n==1)return 1.0;//一個點if(target == 1)//多個點,最終目標(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連接著多少個未訪問的點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++;//計數(shù)}}for(auto& e : edges){if((e[0] == tp.first && !visited[e[1]]) || (e[1]==tp.first && !visited[e[0]]) ){ //將連接的點加入隊列,并計算概率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 下面還有連接點嗎?if(found){for(auto& e : edges){if(((e[0] == target && !visited[e[1]]))||(e[1]==target && !visited[e[0]])){ //有未訪問的,則有路noway = false;break;}}}}if(found){if(t==0)//時間到了,剛好找到return prob;else if(t < 0)//時間不夠,不可能到達return 0;else //時間夠{if(noway)//沒有路,青蛙停留在targetreturn prob;return 0;//有路,青蛙肯定走過去了,在target 概率 0}}}return prob;} };

總結(jié)

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

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