File: WeightedDigraph.h

package info (click to toggle)
kissplice 2.6.7-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 16,752 kB
  • sloc: cpp: 8,783; python: 1,618; perl: 389; sh: 72; makefile: 18
file content (44 lines) | stat: -rw-r--r-- 947 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifndef WEIGHTED_DIGRAPH_H
#define WEIGHTED_DIGRAPH_H

#include <vector>
using namespace std;

class WeightedEdge{
 public:
  int node;
  int cost; 
  bool removed;
  WeightedEdge(int n, int nCost) : node(n), cost(nCost), removed(false) { }
};

class WeightedDigraph{
 public:
  vector<vector<WeightedEdge> > adj_list;
  vector<bool> removed;
  
  vector<int> node_cost;
  WeightedDigraph(int nbNodes) : adj_list(nbNodes), removed(nbNodes, false), node_cost(nbNodes) { }
  
  void setArcStatus(bool status, int u, int v)
  {
    for (int i = 0; i < (int)adj_list[u].size(); i++)
      if (adj_list[u][i].node == v)
	adj_list[u][i].removed = status;
  }  

  int adjListSz(int node)
  {
    int sz = 0;
    for (int i = 0; i < (int)adj_list[node].size(); i++)
      sz += (!adj_list[node][i].removed && !removed[adj_list[node][i].node]);
    
    return sz;
  }
  int outDegree(int node)
  {
    return (int)adj_list[node].size();
  }  
};

#endif