时间复杂度:O(N)
void bfs(int u)
{
memset( v , 0 , sizeof v );
queue<int>q;
dis[u] = 0;
vis[u] = 1;
q.push(u);
while(q.size())
{
int x = q.front();
q.pop();
for(int i = head[x]; i ; i = next[i])
{
int y = ver[i];
if(vis[y]) continue;
dis[y] = dis[x] + edge[i];
vis[y] = 1;
q.push(y);
}
}
}
int main()
{
bfs( 1 );
for ( int i=1; i<=n; i++ )
if ( s<dis[i] ) s=dis[i],rt1=i
bfs( rt1 ); s=0;
for ( int i=1; i<=n; i++ )
if ( s<dis[i] ) s=dis[i],rt2=i;
//s为直径,rt1,rt2分别为直径两端
}
我也去整理图论了
嗯嗯,图论模板贼多
【哭】