从明天开始补录丢失的文章,共勉!
TODO:明后天画张图,尝试表达的更清楚。
#include <bits/stdc++.h>
#define mmax 11000
using namespace std;
void print(int start);

struct Node{
	// to 终点  weight 权值  next 表示与当前点同起点的另一条边在node数组的位置(下标) 
	int to,weight,next;
}node[mmax];
int head[mmax];
int cont = 0;
// 链式向前星其实就是n条链表 插入的方式为头插法  最迟加入的边在最前面 
int add(int from,int to,int wei) {
	//加入终点 
	node[cont].to = to;
	//添加权值 
	node[cont].weight = wei;
	//(重点!!) 头插法   当前结点的next等于上一次加入的结点在node数组的下标 
	node[cont].next = head[from];
	//当前结点变成头结点 
	//例如:
	//add(1,2,1)  head[1] = 0 (当前cont = 0 ,并且cont为node数组的下标,即head[1]指向node数组的下标) 
	//这时候add(1,3,1) node[1].next = head[1] = 0;  head[1] = 1;
	//这时候head[1]指向的就是1,3这条边 然后node[1].next = 0   node[0]就是1,2这条边 
	head[from] = cont++;
}
//遍历所有的结点 
void dfs(int start,int previous) {
	cout<<start<<" ";
	for(int i = head[start]; i != -1; i = node[i].next) {
		if(node[i].to != previous) {
			dfs(node[i].to,start);
		}
	}
}

//遍历起点为i的链表 
void print(int start) {
	// 通过node[i].next 定位下一条边 
	for(int i = head[start]; i != -1; i = node[i].next) {
		// start 链表的起点  i  记录以start为起点的边在node数组里的下标  weight边的权值  to 边的终点 
		cout<<"head "<<start<<" index "<<i<<" wei "<<node[i].weight<<" to "<<node[i].to<<endl;
	}
} 

int main() {
	memset(head,-1,sizeof(head));
	add(1,2,1);
	add(1,3,1);
	add(1,4,1);
	add(2,5,1);
	//遍历所有链表 
	cout<<"dfs: ";
	dfs(1,0);
	cout<<endl;
	print(1);
	return 0;
}