📄 ldigraph.h
字号:
// file ldigraph.h
// linked adjacency list representation of a directed graph
// initial version
#ifndef LinkedDigraph_
#define LinkedDigraph_
#include "lbase.h"
#include "xcept.h"
class LinkedDigraph : public LinkedBase<int> {
public:
LinkedDigraph(int Vertices = 10)
: LinkedBase<int> (Vertices) {}
bool Exist(int i, int j) const;
LinkedDigraph& Add(int i, int j);
LinkedDigraph& Delete(int i, int j);
int InDegree(int i) const;
protected:
LinkedDigraph& AddNoCheck(int i, int j);
};
bool LinkedDigraph::Exist(int i, int j) const
{// Is edge (i,j) present?
if (i < 1 || i > n) throw OutOfBounds();
return (h[i].Search(j)) ? true : false;
}
LinkedDigraph& LinkedDigraph::Add(int i, int j)
{// Add edge (i,j) to the graph.
if (i < 1 || j < 1 || i > n || j > n || i == j
|| Exist(i, j)) throw BadInput();
return AddNoCheck(i, j);
}
LinkedDigraph& LinkedDigraph::AddNoCheck(int i, int j)
{// Add edge but do not check for errors.
h[i].Insert(0,j); // add j to vertex i list
e++;
return *this;
}
LinkedDigraph& LinkedDigraph::Delete(int i, int j)
{// Delete edge (i,j).
if (i < 1 || i > n) throw OutOfBounds();
h[i].Delete(j);
e--;
return *this;
}
int LinkedDigraph::InDegree(int i) const
{// Return indegree of vertex i.
if (i < 1 || i > n) throw OutOfBounds();
// count in edges at vertex i
int sum = 0;
for (int j = 1; j <= n; j++)
if (h[j].Search(i)) sum++;
return sum;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -