图写成一个类
只集成了最基本的功能。。也就是加边和取相邻点。
1 const int maxn=1e4+5, maxm=1e5+5; 2 3 struct Edge{ 4 int to, v, next; 5 }; 6 7 class Graph{ 8 private: 9 int cntedge; 10 int fir[maxn]; 11 Edge edge[maxn]; 12 public: 13 class iterator; 14 Graph(){ 15 cntedge=0; 16 return; 17 } 18 void addedge(int x, int y, int v){ 19 ++cntedge; 20 Edge &e=edge[cntedge]; 21 e.to=y, e.v=v, e.next=fir[x]; 22 fir[x]=cntedge; 23 return; 24 } 25 }; 26 27 class Graph::iterator{ 28 private: 29 int nowedge; 30 Graph *g; 31 public: 32 iterator(Graph *graph, int x){ 33 g=graph; 34 nowedge=g->fir[x]; 35 return; 36 } 37 iterator& operator ++(){ 38 nowedge=g->edge[nowedge].next; 39 return *this; 40 } 41 int operator *(){ 42 return g->edge[nowedge].to; 43 } 44 };
思想大概是这样的:定义一个图类,然后再定义一个迭代器来访问一个节点对应的边。定义迭代器时要指定对应的图,对应的结点。下一条边用++,取对应结点用*。。