标签:col color tree 注意 个数 邻接矩阵 ... bsp const
方法一:邻接矩阵
简单明了,但存储稀疏图时空间浪费过多。
方法二:vector
为每一个结点开一个链表,储存与之相邻的结点。链表用vector动态数组实现。
1 const int maxn=1e5+5; 2 vector<int> tree[maxn]; 3 inline void add(int u,int v) 4 { 5 tree[u].push_back(v); 6 } 7 void dfs(int p,int i) 8 { 9 //... 10 for(int j=0;j<tree[i].size();++j) 11 { 12 if(tree[i][j]==p)continue; 13 dfs(i,tree[i][j]); 14 } 15 }
方法三:邻接表
为每一个结点开一个链表,储存与之相邻的边。链表由数组实现。假设一个图共有n个结点和m条边,则建立数组head[1-n]记录编号为i的结点对应的链表的头一个元素,数组next[1-m]记录编号为j的边在链表中的下一个元素。注意还需要一个数组保存输入数据,要解决这两个问题,只需要注意到每个结点对应链表里存储的边可以由边的另一个端点表示,并且这种表示法天生就具有方向性。于是可以开一个q数组记录输入数据。
1 const int maxn=1e2+5; 2 const int maxm=1e4+5; 3 int q[2*maxm],head[maxn],nxt[maxm];//next是保留字,这里用nxt 4 int pos=0; 5 inline void add(int u,int v) 6 { 7 q[++pos]=u; 8 nxt[v]=head[u]; 9 head[u]=pos; 10 } 11 void dfs(int p,int i) 12 { 13 //... 14 for(int j=head[i];j;j=next[j]) 15 { 16 if(q[j]==p)continue; 17 dfs(i,q[j]); 18 } 19 }
--未完待续--
标签:col color tree 注意 个数 邻接矩阵 ... bsp const
原文地址:https://www.cnblogs.com/maoruimas/p/9544151.html