Pabon_SEC

The Net

Sep 13th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int routers,par[302],cost[302],source,dest;
  6.  
  7. bool color[302],yes;
  8.  
  9. vector<int>graph[302];
  10.  
  11. void bfs()
  12. {
  13.     queue<int>Q;
  14.  
  15.     Q.push(source);
  16.  
  17.     color[source] = true;
  18.  
  19.     cost[source] = 0;
  20.  
  21.     while(!Q.empty())
  22.     {
  23.         int u = Q.front();
  24.  
  25.         Q.pop();
  26.  
  27.         int sz = graph[u].size();
  28.  
  29.         for(int i = 0;i<sz;i++)
  30.         {
  31.             int j = graph[u][i];
  32.  
  33.             if(color[j]==false)
  34.             {
  35.                 color[j] = true;
  36.  
  37.                 cost[j] = cost[u]+1;
  38.  
  39.                 par[j] = u ;
  40.  
  41.                 Q.push(j);
  42.  
  43.                 if(j==dest)
  44.                 {
  45.                     yes = true;
  46.  
  47.                     while(!Q.empty())
  48.                         Q.pop();
  49.  
  50.                     break;
  51.                 }
  52.             }
  53.         }
  54.  
  55.         if(yes)
  56.             break;
  57.     }
  58. }
  59.  
  60. void path(int u)
  61. {
  62.     if(u==source)
  63.     {
  64.         printf("%d",source);
  65.  
  66.         return;
  67.     }
  68.     else
  69.     {
  70.         path(par[u]);
  71.  
  72.         printf(" %d",u);
  73.     }
  74.  
  75.     return;
  76. }
  77.  
  78. int main()
  79. {
  80.     string s;
  81.  
  82.     int i,j,len,from,to;
  83.  
  84.     while(cin>>routers)
  85.     {
  86.         for(i=1; i<=routers; i++)
  87.         {
  88.             cin>>s;
  89.  
  90.             len = s.length();
  91.  
  92.             from = to = 0;
  93.  
  94.             int idx = 0;
  95.  
  96.             while(s[idx]!='-')
  97.             {
  98.                 from = (from*10)+(s[idx]-48);
  99.  
  100.                 idx++;
  101.             }
  102.  
  103.             for(j=idx+1; j<len; j++)
  104.             {
  105.                 if(s[j]>='0' && s[j]<='9')
  106.                 {
  107.                     to = (to*10)+(s[j]-48);
  108.                 }
  109.  
  110.                 if(s[j]==',' || j==len-1)
  111.                 {
  112.                     graph[from].push_back(to);
  113.  
  114.                     to = 0;
  115.                 }
  116.             }
  117.         }
  118.  
  119.         int query;
  120.  
  121.         cout<<"-----\n";
  122.  
  123.         cin>>query;
  124.  
  125.         for(i=1;i<=query;i++)
  126.         {
  127.             cin>>source>>dest;
  128.  
  129.             yes = false;
  130.  
  131.             bfs();
  132.  
  133.             if(!yes)
  134.             {
  135.                 cout<<"connection impossible\n";
  136.             }
  137.             else
  138.             {
  139.                 path(dest);
  140.  
  141.                 cout<<"\n";
  142.             }
  143.  
  144.             memset(color,false,sizeof(color));
  145.  
  146.             memset(cost,0,sizeof(cost));
  147.  
  148.             memset(par,0,sizeof(par));
  149.         }
  150.  
  151.         for(i=0;i<=routers;i++)
  152.         {
  153.             graph[i].clear();
  154.         }
  155.     }
  156.  
  157.     return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment