用欧拉序遍历树


问题描述:在树形道路上从任意一个地点出发访问所有的地点 

思路:走到端点后需要往回走,因此可以使用欧拉序.
但是欧拉序最终会回到起点,需要在访问完所有地点后提前终止行程.
由于起点可能在树的中间(非端点),而用vector来存储树在生成欧拉序时起点必须为端点,故改用二维数组. 

author:Meloor

date:2019/2/2 

样例: 
4 3
3 1 1
3 2 1
3 4 2
3->1->3->2->3->4

5 3
1 2 1
2 3 1
3 4 2
4 5 3
3->2->1->2->3->4

#include
#include
using namespace std;
const int N=5001;
int n;//地点数 
int x;//起点 
int u,v,w;//道路的起点,终点,长度 
int tree[N][N];
int vis[N];//已访问数组,vis[i]为0表示i还未被访问,1表示已访问
int count; 
void DFS(int start){//3
	static int beginAt=0;//0表示还未开始dfs 
	if(beginAt==0){
		cout<<""<"<"<

 

你可能感兴趣的:(algorithm,欧拉序,c++)