zoukankan      html  css  js  c++  java
  • xcoj1226-捕鼠

    题目链接

    题目描述

    GX养的一只仓鼠最近跑进了一个神秘的城堡里,他准备在这个有n个房间的城堡中抓捕他的仓鼠,他在房间0放了一块食物,根据抓鼠攻略,这块食物可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给你一张这个城堡的地图,上面标有各个房间的关系,已知每个房间都相连且距离为1,GX想知道他的仓鼠可能出现在哪些房间,请输出这些房间的总数

    输入

    第一行输入n(0< n <=100000)和D(0< D < n)
    接下来的n-1行为房间的连接关系,每行有两个数x,y代表房间x与房间y相邻

    输出

    对于每组数据,输出一个数,表示仓鼠可能出现的房间的数量

    样例输入

    10 2
    0 1
    0 2
    0 3
    1 4
    1 5
    2 6
    3 7
    4 8
    6 9

    样例输出

    2

    思路

    因为题中说明有n个房间和n-1条通道,故可以将它们看成一棵树,然后运用从房间0开始,运用深度优先搜索或者广度优先搜索进行遍历深度为D的房间,并统计数量。

    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <queue>
    #include <fstream>
    using namespace std;
    
    int d;
    int count;
    vector<int> edges[100005];
    bool vis[100005];
    
    //深度优先遍历
    void dfs(int v, int step)
    {
        if(step == d)
        {
            return ;
        }
        else
        {
            vis[v] = true;
            count ++;
            for(int i = 0; i < edges[v].size(); ++ i)
            {
                if(!vis[edges[v][i]])
                {
                    dfs(edges[v][i], step + 1);           
                }
            }
        }
    }
    
    int main()
    {
        //ifstream cin("data.in");
        int n;
        while(cin >> n >> d)
        {
            count = 0;
            d ++;
            memset(vis, false, sizeof(bool) * n);
            for(int i = 0; i < n; i ++)
            {
                    edges[i].clear();//注意初始化,负责会出错
            }
            for(int i = 0; i < n-1; ++ i)
            {
                int x, y;
                cin >> x >> y;
                edges[x].push_back(y);
            }
            dfs(0, 0);
            cout << n - count << endl;//count为以遍历的房间,即距离房间0距离小于等于D的房间
        }
        return 0;
    }
  • 相关阅读:
    剑指offer——二叉树的深度
    剑指offer——约瑟夫环
    剑指offer——矩阵中的路径
    剑指offer——机器人的运动范围
    Java一些知识
    剑指offer——判断链表中是否有环
    无序数组array, 找到数组中两个数的最大差值
    剑指offer——二叉搜索树的第k个节点
    记录结果再利用的"动态规划"之背包问题
    倍增算法
  • 原文地址:https://www.cnblogs.com/topk/p/6580111.html
Copyright © 2011-2022 走看看