カエル(Leetcode179周レース)後5355. T秒位置

カエル後5355. T秒位置

難易度0

いいえ、ツリーのn個の頂点、頂点番号1からまでで構成される  nカエル  頂点1  からスタートします。次のようにルールは以下のとおりです。

  • それは現在の蛙飛びされた第二の、内の別の頂点  未訪問  の頂点処理し(それらが直接結合している場合)。
  • カエルはすでに訪れた頂点戻ってジャンプすることはできません。
  • 異なる複数の頂点がカエルをスキップすることができた場合、それは同じ確率での頂点のいずれかにジャンプします。
  • カエルは、任意の頂点にジャンプすることができない場合は、各ジャンプの場所に滞在するので、未訪問。

無向アレイを有するツリーエッジは  edges 、記載されて  edges[i] = [fromi, toi] 直接通信手段の存在  fromi と  toi 2つの頂点の縁。

カエルは、返された  t 第二目標頂点嘘の後  target に確率。

 

例1:

入力。N- = 7、エッジ= [1,2]、[1,3]、[1,7]、[2,4]、[2,6]、[3,5]、T = 2、 = 4ターゲット
 出力: 0.16666666666666666の 
 説明:図は、経路ホッピングカエルを示します。頂点からカエル1つのオフ、第1の第 2頂点1/3スキップの確率で、そして第2秒間 2秒位置する頂点確率が1/3である4カエルそう後4頂点1/2スキップの確率で、 * 1/2 = 1/6 = 0.16666666666666666。 

例2:

入力。N- = 7、エッジ= [1,2]、[1,3]、[1,7]、[2,4]、[2,6]、[3,5]、T = 1、。 = 7ターゲット
 出力: 0.3333333333333333の
 説明:図は、経路ホッピングカエルを示します。頂点からカエル1つのオフ、確率は1/3 = 0.3333333333333333とすることができる1秒 7頂点ジャンプの後。 

例3:

入力。N- = 7、エッジ= [1,2]、[1,3]、[1,7]、[2,4]、[2,6]、[3,5]、T = 20であり、ターゲット= 6
 出力: 0.16666666666666666
class Solution {
public:
	struct Tree
	{
		vector<int>son;
	};
	map<int, Tree>room;
	bool Flag[101] = { 0 };
	int DFS(int s, int e, int c, double &res)
	{
		if (s == e)
		{
			return c;
		}
		int count = 0;;
		for (int i = 0; i < room[s].son.size(); ++i)
		{
			if (!Flag[room[s].son[i]]){
                Flag[room[s].son[i]] = 1;
				count = DFS(room[s].son[i], e, c + 1, res);
				if (count != 0)
				{
                    cout << s<<' ' << room[s].son.size()<<endl;
                    if(c != 0 )
					    res = res / (room[s].son.size() - 1);
                    else
                        res = res / (room[s].son.size());
					return count;
				}
			}
		}
		return 0;
	}
	double frogPosition(int n, vector<vector<int>>& edges, int t, int target) {

		for (int i = 0; i < edges.size(); ++i)
		{
			if (room.find(edges[i][0]) != room.end())
			{
				room[edges[i][0]].son.push_back(edges[i][1]);
			}
			else {
				Tree save;
				room[edges[i][0]] = save;
				room[edges[i][0]].son.push_back(edges[i][1]);
			}
			if (room.find(edges[i][1]) != room.end())
			{
				room[edges[i][1]].son.push_back(edges[i][0]);
			}
			else {
				Tree save;
				room[edges[i][1]] = save;
				room[edges[i][1]].son.push_back(edges[i][0]);
			}
		}
		double res = 1;
		int count = 0;
        Flag[1] = 1; 
		count = DFS(1, target, count, res);
        cout << count << ' ' << room[target].son.size();
        
		if (count > t || (count < t && room[target].son.size() > 1) || (count ==0 && edges.size() != 0))
			return 0;
		return res;
	}
};

 

公開された106元の記事 ウォンの賞賛3 ビュー10000 +

おすすめ

転載: blog.csdn.net/Yanpr919/article/details/104730466