无向树没环
https://www.slideshare.net/mahmoudhikmet/treedirect-and-undirect-tree
class Solution {
public:
double frogPosition(int n, vector<vector<int>>& edges, int t, int target) {
int time = 0;
unordered_map<int,unordered_set<int>> g;
for(int i=0;i<edges.size();i++){
g[edges[i][0]].insert(edges[i][1]);
g[edges[i][1]].insert(edges[i][0]);
}
vector<bool>visited(n+1, false);
queue<pair<int,double>>q;
q.push(make_pair(1, 1));
q.push(make_pair(-1, -1)); //标志一层结束
visited[1] = true;
pair<int,double>cur;cout<<"ok"<<endl;
while(q.empty() == false && time <= t)
{
cur = q.front(); q.pop();
if(cur.first == -1)
{//一层结束
time++;
if(q.empty() == true) return 0;
q.push(make_pair(-1, -1));
continue;
}
visited[cur.first] = true;
if(cur.first == target)
{
if(time < t)
{
for(auto v: g[cur.first])
{
if(!visited[v]) return 0;
}
return cur.second;
}
else //time == t
{
return cur.second;
}
}
int count = 0;
for(auto v: g[cur.first])
{
if(visited[v] == false) count++;
}
if(count == 0) continue;
double p = cur.second / (double)count;
for(auto v: g[cur.first])
{//v是cur节点的邻居(子女,有个是双亲)
if(visited[v] == false)
{
q.push(make_pair(v, p));
}
}
}
return 0;
}
};
参考:
评论区
https://leetcode-cn.com/problems/frog-position-after-t-seconds/comments/