适用于稠密图
class DenseGRAPH
{
public:
DenseGRAPH(int V, bool digraph=false): adj(V), Vcnt(V), Ecnt(0), digraph(digraph)
{
for(int i=0; i<V; i++)
{
adj.assign(V, false);
}
}
int V() const {return Vcnt;}
int E() const {return Ecnt;}
bool directed() const {return digraph;}
void insert(Edge e)
{
int v=e.v, w=e.w;
if(false==adj[v][w])
{
Ecnt++;
}
adj[v][w]=true;
if(!digraph)
{
adj[w][v]=true;
}
}
void remove(Edge e)
{
int v=e.v, w=e.w;
if(true==adj[v][w]) Ecnt--;
adj[v][w]=false;
if(!digraph) adj[w][v]=false;
}
bool edge(int v, int w) const
{
return adj[v][w];
}
class adjIterator;
friend class adjIterator;
private:
int Vcnt, Ecnt;
bool digraph;
vector<vector<bool> > adj;
};
// 迭代器的实现:
class DenseGRAPH::adjIterator
{
public:
adjIterator(const DenseGRAPH&G, int v): G(G), v(v), i(-1){}
int beg()
{
i=-1; return nxt();
}
int nxt()
{
for(i++; i<G.V(); i++)
{
if(true==G.adj[v][i]) return i;
return -1;
}
}
bool end()
{
return i>=G.V();
}
private:
const DenseGRAPH& G;
int i, v;
};