zoukankan      html  css  js  c++  java
  • PAT 1076. Forwards on Weibo (30)

    题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1076

    此题考查图的遍历操作:

    本来我个人觉得可以用dfs的,但是不知何故,有两个case没有过,贴出代码,望指出错误之处:

    #include <cstdio>
    #include <map>
    #include <vector>
    #include <memory.h>
    using namespace std;
    
    const int NUM=1001;
    bool visited[NUM];
    int forwards;
    map<int,vector<int> > adjlist;
    
    void reset()
    {
        memset(visited,false,sizeof(bool)*NUM);
        forwards=0;
    }
    
    void dfs(int sourceNode,int indLevel,int L)
    {
        if(indLevel>L)
            return;
        for(vector<int>::iterator iter=adjlist[sourceNode].begin();iter!=adjlist[sourceNode].end();++iter)
        {
            if(!visited[*iter])
            {
                ++forwards;
                visited[*iter]=true;
                dfs(*iter,indLevel+1,L);
            }
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int N,L;
        scanf("%d %d",&N,&L);
        if(L>6)
            L=6;
        int i,Mi,j,followed;
        for(i=1;i<=N;++i)
        {
            scanf("%d",&Mi);
            for(j=0;j<Mi;++j)
            {
                scanf("%d",&followed);
                adjlist[followed].push_back(i);
            }
        }
        int K,query;
        scanf("%d",&K);
        for(i=0;i<K;++i)
        {
            scanf("%d",&query);
            reset();
            visited[query]=true;
            dfs(query,1,L);
            printf("%d
    ",forwards);
        }
        return 0;
    }
    View Code

    后来换了bfs后,AC了:

    #include <cstdio>
    #include <map>
    #include <vector>
    #include <queue>
    #include <memory.h>
    using namespace std;
    
    const int NUM=1001;
    
    bool  hasForward[NUM];
    int forwards;
    map<int,vector<int> > adjlist;
    queue<int> recordQueue;
    
    void reset()
    {
        memset(hasForward,false,sizeof(bool)*NUM);
        forwards=0;
        while(!recordQueue.empty())
            recordQueue.pop();
    }
    
    void bfs(int query,int level)
    {
        int curLevel=1;
        hasForward[query]=true;
        recordQueue.push(query);
        int endOfLevel=recordQueue.back();
        int cur;
        while(!recordQueue.empty()&&curLevel<=level)
        {
            cur=recordQueue.front();
            recordQueue.pop();
            for(vector<int>::iterator iter=adjlist[cur].begin();iter!=adjlist[cur].end();++iter)
            {
                if(!hasForward[*iter])
                {
                    recordQueue.push(*iter);
                    ++forwards;
                    hasForward[*iter]=true;
                }
            }
            if(cur==endOfLevel)
            {
                ++curLevel;
                endOfLevel=recordQueue.back();
            }
        }
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        int N,L;
        scanf("%d %d",&N,&L);
        if(L>6)
            L=6;
        int i,j;
        int Mi,followed;
        for(i=1;i<=N;++i)
        {
            scanf("%d",&Mi);
            for(j=0;j<Mi;++j)
            {
                scanf("%d",&followed);
                adjlist[followed].push_back(i);
            }
        }
        int K,query;
        scanf("%d",&K);
        for(i=0;i<K;++i)
        {
            scanf("%d",&query);
            reset();
            bfs(query,L);
            printf("%d
    ",forwards);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    JavaScript打印99乘法表
    Python列表推导式玩法
    Python错误重试方法
    pandas + jupyter进行数据处理
    新手小白的爬虫神器-无代码高效爬取数据
    Adb连接模拟器出现版本错误
    Python发送多人邮件报错
    Django入门
    git clone 下载速度解决办法
    Python实现自动刷抖音
  • 原文地址:https://www.cnblogs.com/wwblog/p/3709216.html
Copyright © 2011-2022 走看看