fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define fast ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  6. #define pb push_back
  7.  
  8. const double PI = 3.141592653589793;
  9.  
  10. string s[105];
  11. int m;
  12. int d[105];
  13. queue <int> q;
  14. vector <int> e[1000];
  15. int inf = 1e9;
  16.  
  17. int main() {
  18. fast;
  19. cin >> m;
  20. int y = 0; // Вспомогательная переменная для заполнения массива s
  21. for(int i = 0; i < m; i++){
  22. string s1, s2, s3;
  23. cin >> s1 >> s2 >> s3;
  24. int x1 = -1, x2 = -1;
  25. // Находим индексы в уже имеющемся массиве где s[i] - хранит название элемента, а i это его номер
  26. for(int j = 0; j < 105; j++){
  27. if(s1 == s[j]) x1 = j;
  28. if(s3 == s[j]) x2 = j;
  29. }
  30. // Если не нашли название в массиве s, то добаляем
  31. if(x1 == -1){
  32. x1 = y;
  33. s[y] = s1;
  34. y++;
  35. }
  36. if(x2 == -1){
  37. x2 = y;
  38. s[y] = s3;
  39. y++;
  40. }
  41. e[x1].pb(x2);
  42.  
  43. }
  44. string st, f;
  45. cin >> st >> f;
  46. int u = -1, v = -1;
  47. //Считываем название элементов и ищем индексы в массиве s[i]
  48. for(int i = 0; i < 105; i++)
  49. d[i] = inf;
  50. for(int i = 0; i < 105; i++){
  51. if(s[i] == st) u = i;
  52. if(s[i] == f) v = i;
  53. }
  54. // То где была моя ошибка
  55. if(st == f){
  56. cout << 0;
  57. return 0;
  58. }
  59. // Если какое - то название не нашли в массиве s[i] значит его нет и в графе -> ответ -1
  60. if(u == -1 or v == -1){
  61. cout << -1;
  62. return 0;
  63. }
  64. d[u] = 0;
  65. q.push(u);
  66. // Запускаем bfs
  67. while(!q.empty()){
  68. int r = q.front();
  69. q.pop();
  70. for(auto w : e[r]){
  71. if(d[w] == inf){
  72. d[w] = d[r] + 1;
  73. q.push(w);
  74. }
  75. }
  76. }
  77. if(d[v] == inf) cout << -1;
  78. else cout << d[v];
  79. return 0;
  80. }
Success #stdin #stdout 0s 4304KB
stdin
Standard input is empty
stdout
Standard output is empty