uva 336

3 篇文章 0 订阅

https://uva.onlinejudge.org/external/3/336.pdf

#include<iostream>

#include<queue>

#include<algorithm>

#include<map>

#include<string.h>

#include<math.h>

#include<stdio.h>

#include <iomanip>

#include <stack>

#include <vector>

#include <sstream>

using namespace std;


map<int,int>used;

map<int,vector<int>>martix;

map<int,int>::iterator it;



void BFS(int start,map<int,vector<int>>martix);//遍历起点可到达的点以及到各点的操作数



int main()

{

    int cas = 1;

    int i,j;

    int num_of_network_connections;

    while(scanf("%d",&num_of_network_connections)==1 && num_of_network_connections)

    {

        int node_a,node_b;

        martix.clear();

        

        for(i=0;i<num_of_network_connections;i++)

        {

            scanf("%d%d",&node_a,&node_b);

            martix[node_a].push_back(node_b);

            martix[node_b].push_back(node_a);

        }

        

        //query following

        int start,len;

        while(scanf("%d %d",&start,&len)==2 && (start || len))

        {

            int too_long_to_reach = 0;

            used.clear();

            BFS(start,martix);

            for(it=used.begin();it!=used.end();it++)

            {

                if((*it).second>len)

                    too_long_to_reach++;

            }

            unsigned long unable_to_reach= martix.size()-used.size();

            unable_to_reach+=too_long_to_reach;

            cout<<"Case "<<cas<<": "<<unable_to_reach<<" nodes not reachable from node "<<start<<" with TTL = "<<len<<"."<<endl;

            cas++;

        }

        

    }

    return 0;

}


void BFS(int start,map<int,vector<int>>martix)

{

    queue<int>temp;

    temp.push(start);

    used[start] = 0;

    while(!temp.empty())

    {

        int pre = temp.front();

        temp.pop();

        unsigned long Size = martix[pre].size();

        for(int i=0;i<Size;i++)

        {

            int n= martix[pre][i];

            if(!used.count(n)) //used[]中存在键值n

            {

                used[n] = used[pre]+1;

                temp.push(n);

            }

        }

    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值