Имеется программа, осуществляющая обход в ширину и глубину для поиска пути между вершинами.
#include <vector>
#include <locale.h>
#include <queue>
#include <Windows.h>
#include <set>
#include <iostream>
#include <fstream>
using namespace std;
UINT BFS(UINT begin, UINT vertex, UINT n,  const vector<vector<int>> &graph)
{
   queue<int> q;
   q.push(begin);
   set<int> gray;
   while (!q.empty())
   {
      UINT v = q.front();
      q.pop();
      gray.insert(v);
      if (v == vertex)
         return 1;
      for (UINT i = 0; i < n; i++)
         if (graph[v][i])
            q.push(i);
      
      if (q.empty())
         return 0;
   }
   for (UINT j : gray);
}
UINT DFS(UINT u, UINT vertex, UINT n,  const vector<vector<int>> &graph, set<int> &gray, set<int> &black)
{
   gray.insert(u);
   for (UINT i = 0; i < n; i++)
      if (graph[u][i])
      {
         if (i == vertex)
            return 1;
        int is_black = black.count(i), is_gray = gray.count(i), is_white = 0;
         
        if (!is_black || !is_gray)
            is_white = 1;
         if (is_white)
            if (DFS(i, vertex, n, graph, gray, black))
               return 1;
      }
   
   gray.erase(u);
   black.insert(u);
   return 0;
}
void main()
{
   UINT one = 0, two = 0;
   setlocale(LC_ALL, "");
   ifstream get_content("in.txt");
   if (get_content)
   {
      UINT vertex, edge;
      get_content >> vertex >> edge;
      vector<vector<int>> graph;
      graph.assign(vertex, vector<int>(vertex));;
      UINT one, two;
      for (UINT i = 0; i < edge; i++)
      {
         UINT one, two;
         get_content >> one >> two;
         graph[one][two] = 1;
      }
      
      printf_s("Введите две вершины: ");
      cin >> one;
      cin >> two;
      set<int> gray, black;
      UINT b = DFS(one, two, vertex, graph, gray, black);
      
      b ? printf_s("Путь есть\n") : printf_s("Пути нет\n");
      b = BFS(one, two, vertex, graph);
      b ? printf_s("Путь есть\n") : printf_s("Пути нет\n");
   }
   else
      printf_s("Не удалось открыть файл");
   return;
}
В файл in.txt в первую строку записывается число вершин и ребер, далее записываются пути из одних вершин в другие
В ходе тестирования обнаружилось,  что при вводе в in.txt:
4 4 //4 вершины и 4 ребра
0 1
1 2
2 0
2 3
Программа при поиске пути из вершины 0 в вершину 3(Путь есть) выдает ошибку.  В чем может быть проблема? Буду благодарен за предоставление исправленного участка кода