Hi, I don't know if this is mentioned before, df.c is introducing a very good way to think of algorithms. It brings two effective orders to handle many problems: DF_FORWARD and DF_BACKWARD. They means two fact respectively: a subproblem will not be accessed until all its parents get accessed; And a problem will not be accessed until all its subproblems get accessed. The single source shortest path will have a O(n) solution instead of O(n + log(n)) if using DF_FORWARD. Defining df_confluence_function_n like following: { if(e->wight + e->src->total_wight < e.dest->total_wight) { e->dest.total_wight = e->wight + e->src->total_wight; e->dest.parent = e->src; } }
I think it's really O(n) for a dfs right? That's what I want to proposed. -- Lin Zuojian