Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct Vertex {
- int id;
- double w;
- };
- struct Edge {
- Vertex v;
- double w;
- };
- const int maxn = 1e6 + 100;
- vector <Edge> g[maxn];
- vector <Vertex> vs;
- int n = 0, m = 0;
- void updEdgesWeight() {
- for (int i = 0; i < n; ++i) {
- int size = g[i].size();
- double weight = vs[i].w * 0.85 / size;
- for (int j = 0; j < g[i].size(); ++j)
- g[i][j].w = weight;
- }
- }
- void updVerticesWeight() {
- vector <Vertex> newvs;
- for (int i = 0; i < n; ++i)
- newvs.push_back({vs[i].id, vs[i].w * 0.15});
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < g[i].size(); ++j)
- newvs[g[i][j].v.id].w += g[i][j].w;
- for (int i = 0; i < n; ++i)
- vs[i] = newvs[i];
- }
- void printGraph() {
- for (int i = 0; i < n; ++i)
- cout << i << ": " << vs[i].w << endl;
- cout << endl << endl;
- }
- int main()
- {
- cout << "Enter number of vertices: ";
- cin >> n;
- int id, w;
- cout << "Enter " << n << " vertices' weights: " << endl;
- for (int i = 0; i < n; ++i) {
- cout << i + 1 << ": ";
- cin >> w;
- vs.push_back({i, w});
- }
- cout << "Enter number of edges: ";
- cin >> m;
- int u, v;
- cout << "Enter " << m << " pairs of vertices u and v separated by space: " << endl;
- for (int i = 0; i < m; ++i) {
- cin >> u >> v;
- g[u - 1].push_back({vs[v - 1], 0});
- }
- int k;
- cout << "Enter number of iterations in PageRank algorithm: " << endl;
- cin >> k;
- for (int i = 0; i < k; ++i) {
- updEdgesWeight();
- updVerticesWeight();
- }
- printGraph();
- return 0;
- }
- /*
- 4
- 1 1
- 2 1
- 3 1
- 4 1
- 5
- 1 2
- 1 3
- 2 3
- 3 1
- 4 3
- 100
- 7
- 1 1
- 2 1
- 3 1
- 4 1
- 5 3
- 6 1
- 7 1
- 13
- 4 1
- 1 3
- 2 1
- 2 3
- 3 4
- 3 5
- 5 2
- 2 5
- 7 2
- 5 7
- 6 5
- 6 7
- 4 6
- 100
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement