Advertisement
tumaryui

Untitled

May 28th, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include <vector>
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <queue>
  5. #include <fstream> // библиотека для ввода вывода в файл
  6.  
  7. using namespace std;
  8.  
  9. const double p = 0.2; // вероятность из условия
  10.  
  11.  
  12. main() {
  13. ofstream value, iter_num;
  14. value.open("value.txt");
  15. iter_num.open("iter.txt");
  16. int n, m; // количество вершин количество ребер
  17. vector<vector<int> > graph; // граф, хранимый в матрице смежности
  18. bool visited[100000];
  19. for(int i = 0; i < 100000; i++) {
  20. visited[i] = 0;
  21. }
  22. //ввод графа
  23. graph = vector<vector<int> > (n + 1, vector<int> ());
  24. cin >> n >> m; // количество вершин и ребер
  25. for(int i = 0; i < m; i++) {
  26. //между l и r есть ребро
  27. int from, to;
  28. cin >> from >> to;
  29. graph[from].push_back(to);
  30. graph[to].push_back(from);
  31. }
  32.  
  33.  
  34. //производим обход графа в ширину
  35. queue<int> queue_; // очередь нужная для обхода в ширину, в ней хранятся вершины, которые ждут обработки, после обработки вершина удаляется из очереди.
  36. int start = 1; // стартовая вершина
  37. queue_.push(start); // помещаем стартовую вершину в очередь для обработки
  38.  
  39. int iteration = 0; // номер текущей итерации
  40.  
  41. // пока в очереди есть вершины для обработки выполняем алгоритм
  42. while(!queue_.empty()) {
  43. int vertex = queue_.front(); // берем первую из очереди вершину v
  44.  
  45. queue_.pop(); // удаляем ее из очереди
  46. visited[vertex] = 1; // помечаем вершину посещенной
  47. iter_num << iteration++ << endl; // в файл it.txt вывожу номер итерации
  48. value << queue_.size() + 1 << endl; // в файл val.txt вывожу размер очереди, делаю q.size() + 1, т.к до этого была удалена вершина
  49.  
  50. // проходим по всем вершинам соединенным с текущей
  51. for(int i = 0; i < graph[vertex].size(); i++) {
  52. int to = graph[vertex][i]; // вершина соединенная с текущей вершиной v
  53. if(!visited[to]) { // если вершина не посещена, то рассматриваем ее
  54. double prob = rand() / RAND_MAX; // получаем какое то число от 0 до 1
  55. if(prob <= p) { // с вероятностью p мы проходим условие
  56. queue_.push(to); // помещаем вершину to в очередь для обработки
  57. }
  58. }
  59. }
  60. }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement