Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. struct Vertex {
  7.     int id;
  8.     double w;
  9. };
  10.  
  11. struct Edge {
  12.     Vertex v;
  13.     double w;
  14. };
  15.  
  16. const int maxn = 1e6 + 100;
  17.  
  18. vector <Edge> g[maxn];
  19.  
  20. vector <Vertex> vs;
  21. int n = 0, m = 0;
  22.  
  23. void updEdgesWeight() {
  24.     for (int i = 0; i < n; ++i) {
  25.         int size = g[i].size();
  26.         double weight = vs[i].w * 0.85 / size;
  27.         for (int j = 0; j < g[i].size(); ++j)
  28.             g[i][j].w = weight;
  29.     }
  30. }
  31.  
  32. void updVerticesWeight() {
  33.     vector <Vertex> newvs;
  34.     for (int i = 0; i < n; ++i)
  35.         newvs.push_back({vs[i].id, vs[i].w * 0.15});
  36.     for (int i = 0; i < n; ++i)
  37.         for (int j = 0; j < g[i].size(); ++j)
  38.             newvs[g[i][j].v.id].w += g[i][j].w;
  39.     for (int i = 0; i < n; ++i)
  40.         vs[i] = newvs[i];
  41. }
  42.  
  43. void printGraph() {
  44.     for (int i = 0; i < n; ++i)
  45.         cout << i << ": " << vs[i].w << endl;
  46.     cout << endl << endl;
  47. }
  48.  
  49. int main()
  50. {
  51.     cout << "Enter number of vertices: ";
  52.     cin >> n;
  53.     int id, w;
  54.     cout << "Enter " << n << " vertices' weights: " << endl;
  55.     for (int i = 0; i < n; ++i) {
  56.         cout << i + 1 << ": ";
  57.         cin >> w;
  58.         vs.push_back({i, w});
  59.     }
  60.  
  61.     cout << "Enter number of edges: ";
  62.     cin >> m;
  63.     int u, v;
  64.     cout << "Enter " << m << " pairs of vertices u and v separated by space: " << endl;
  65.     for (int i = 0; i < m; ++i) {
  66.         cin >> u >> v;
  67.         g[u - 1].push_back({vs[v - 1], 0});
  68.     }
  69.  
  70.     int k;
  71.     cout << "Enter number of iterations in PageRank algorithm: " << endl;
  72.     cin >> k;
  73.     for (int i = 0; i < k; ++i) {
  74.         updEdgesWeight();
  75.         updVerticesWeight();
  76.     }
  77.  
  78.     printGraph();
  79.     return 0;
  80. }
  81. /*
  82. 4
  83. 1 1
  84. 2 1
  85. 3 1
  86. 4 1
  87. 5
  88. 1 2
  89. 1 3
  90. 2 3
  91. 3 1
  92. 4 3
  93. 100
  94.  
  95.  
  96. 7
  97. 1 1
  98. 2 1
  99. 3 1
  100. 4 1
  101. 5 3
  102. 6 1
  103. 7 1
  104. 13
  105. 4 1
  106. 1 3
  107. 2 1
  108. 2 3
  109. 3 4
  110. 3 5
  111. 5 2
  112. 2 5
  113. 7 2
  114. 5 7
  115. 6 5
  116. 6 7
  117. 4 6
  118. 100
  119.  
  120. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement