超时,==,最直接的想法,假设每一个作为BFS的起始点,计算每一个BFS的深度,返回最小的vertex。但是很遗憾 ,超时了。还是要考虑考虑怎么来减少时间的复杂度。
class Solution {
public:
int BFS(int start,vector<vector<int>>& graph,int n)
{
queue<int> nodes;
queue<int> depth;
vector<int> visit(n,0);
int sum=0;
nodes.push(start);
depth.push(1);
visit[start]=1;
sum=1;
while((!nodes.empty())&&sum!=n)
{
for(int i=0;i<n;i++)
{
if(graph[nodes.front()][i]==1&&visit[i]==0)
{
visit[i]=1;
nodes.push(i);
depth.push(depth.front()+1);
sum++;
}
}
nodes.pop();
depth.pop();
}
return depth.back();
}
vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) {
vector<int> temp(n,0);
vector<vector<int>> graph(n,temp);
for(int i=0;i<edges.size();i++)
{
graph[edges[i].first][edges[i].second]=1;
graph[edges[i].second][edges[i].first]=1;
}
int minHeight=INT_MAX;
vector<int> result;
for(int i=0;i<n;i++)
{
if(minHeight>BFS(i,graph,n))
{
minHeight=BFS(i,graph,n);
result.clear();
result.push_back(i);
}
else if(minHeight==BFS(i,graph,n))
result.push_back(i);
else
{}
}
return result;
}
};