難易度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;
}
};