首页 > 其他 > 详细

04.

时间:2017-04-03 00:32:30      阅读:193      评论:0      收藏:0      [点我收藏+]

经典的dfs或者bfs。题目意思是让你输出一个家庭血统图中每一层中那些没有孩子的结点的数目。

dfs解法:

#include <iostream>
#include <algorithm>
using namespace std;

int G[150][150],degree[101],depth=0,max_dep=0;
int N,M;

void dfs(int u)
{
    int flag=0;
    if(depth>max_dep)max_dep=depth;
    for(int i=1;i<=N;i++)
    {
        if(G[u][i]==1)
        {
            flag=1;
            depth++;
            dfs(i);
            depth--;
        }
    }
    if(flag==0)degree[depth]++;
}

int main()
{
    fill(G[0],G[0]+150*150,-1);
    fill(degree,degree+101,0);
    cin>>N>>M;
    for(int i=0;i<M;i++)
    {
        int v1,d,v2;
        cin>>v1>>d;
        for(int j=0;j<d;j++)
        {
            cin>>v2;
            G[v1][v2]=1;
        }
    }
    dfs(1);
    for(int i=0;i<=max_dep;i++)
    {
        if(i==0)
            cout<<degree[i];
        else
            cout<< <<degree[i];
    }
}

bfs解法。stl的queue也挺好用的,越来越喜欢stl了……

#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

vector<int>G[101];
//"degree" records the number of leaf nodes of each level
//"level" records the depth of each node
int degree[101],level[101],max_dep=-1;
int N,M;

void bfs()
{
    queue<int>q;
    q.push(1);
    level[1]=0;
    while(!q.empty())
    {
        int u=q.front();
        max_dep=level[u]>max_dep?level[u]:max_dep;
        q.pop();
        if(G[u].size()==0)degree[level[u]]++;
        for(int i=0;i<G[u].size();i++)
        {
            int v=G[u][i];
            level[v]=level[u]+1;
            q.push(v);
        }
    }
}

int main()
{
    fill(degree,degree+101,0);
    cin>>N>>M;
    for(int i=0;i<M;i++)
    {
        int v1,d,v2;
        cin>>v1>>d;
        for(int j=0;j<d;j++)
        {
            cin>>v2;
            G[v1].push_back(v2);
        }
    }
    bfs();
    for(int i=0;i<=max_dep;i++)
    {
        if(i==0)
            cout<<degree[i];
        else
            cout<< <<degree[i];
    }
}

 

04.

原文:http://www.cnblogs.com/KRCheung/p/6660223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!