#include<cstdio>
#include<iostream>
#include<map>
#include<queue>
#include<cstring>
using namespace std;
int main()
{ int T=0;
while(true){
int edge;
cin>>edge;
if(edge==0)break;
map<int,int>graph;
int a,b,i,j,tot=1;
vector<int>adjlist[110];
while(edge--){cin>>a>>b;
if(graph[a]==0){graph[a]=tot++;
//cout<<tot<<"TOT"<<endl;
}
if(graph[b]==0){graph[b]=tot++;
//cout<<tot<<"TOT"<<endl;
}
int p=graph[a],q=graph[b];
// cout<<p<<" "<<q<<endl;
adjlist[p].push_back(q);
adjlist[q].push_back(p);
}
//map<int,int>::iterator it;
//for(it=graph.begin();it!=graph.end();it++)cout<<(*it).first<<" "<<(*it).second<<endl;
/*for(i=1;i<tot;i++)
{
cout<<i<<" contains "<<(int)adjlist[i].size()<<" nodes"<<endl;
}
*/
/*BFS*/
int source,ttl;
while(cin>>source>>ttl )
{
if(source+ttl==0)break;
bool visited[1010];
int distance[1010];
queue<int>BFS;
memset(visited,false,sizeof(visited));
memset(distance,-1,sizeof(visited));
distance[graph[ source] ]=0;
visited[graph[source]]=true;
BFS.push(graph[source]);
while(!BFS.empty())
{
int f=BFS.front();
// cout<<"F "<<f<<endl;
for(int i=0;i<adjlist[f].size();i++)
{ int v=adjlist[f][i];
if(visited[v]==false)
{ //cout<<"V "<<v<<endl;
distance[v]=distance[f]+1;
visited[v]=true;
BFS.push(v);
}
}
BFS.pop();
}
int TOTAL=0;
for(int i=1;i<tot;i++)
{
if(distance[i]>ttl || distance[i]==-1)TOTAL++;
}
cout<<"Case "<<++T<<": "<<TOTAL<<" nodes not reachable from node "<<source<<" with TTL = "<<ttl<<"."<<endl;
}
}
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন