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
  • 相关阅读:
    打印机无法访问打印机怎么连
    IDEA 2018 LICENSE SERVER
    idea 项目打包发布
    Oracle的关于小数的使用
    js代码实现购物车效果
    通过shell定时备份数据库
    (二)Linux实操之——网络配置、进程管理、服务管理、组管理、YUM
    (一)Linux实操之——权限、任务调度、磁盘分区
    idea搭建简易ssm项目
    idea右键无法新建Java Class
  • 原文地址:https://www.cnblogs.com/wwblog/p/3709216.html
Copyright © 2011-2022 走看看