資料結構模板

caoxiaoran1202發表於2013-09-01
BFS求樹的直徑:
vector<int> v[110000];
int vis[110000];
int step[110000];
int T,n,q,a,b,m;
int u;
int Mstep;
//求樹的直徑
void bfs(int x)
{
    Mstep=-1;u=-1;
    memset(vis,0,sizeof(vis));
    memset(step,0,sizeof(step));
    vis[x]=1;
    queue<int>q;
    q.push(x);
    while(!q.empty())
    {
        int p=q.front();
        //cout<<"p:"<<p<<endl;
        if(step[p]>Mstep)
        {
            u=p;           //記錄求得最大直徑的位置。
            Mstep=step[p]; //最大直徑
        }
        q.pop();
        for(int i=0;i<v[p].size();i++)
        {
            int t=v[p][i];
            if(vis[t]==0)
            {
                step[t]=step[p]+1;
                q.push(t);
                vis[t]=1;
            }
        }
    }
}

 

相關文章