图写成一个类

只集成了最基本的功能。。也就是加边和取相邻点。

 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 };

 

思想大概是这样的:定义一个图类,然后再定义一个迭代器来访问一个节点对应的边。定义迭代器时要指定对应的图,对应的结点。下一条边用++,取对应结点用*。。

posted @ 2017-08-30 14:22  pechpo  阅读(175)  评论(0编辑  收藏  举报