可以直接dfs判断负环嘛?
  • 板块灌水区
  • 楼主Rosick
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/2/29 22:08
  • 上次更新2024/3/1 12:48:24
查看原帖
可以直接dfs判断负环嘛?
773042
Rosick楼主2024/2/29 22:08

就是直接dfs,然后用 vis[u] 记录每个点的状况,为 1 代表走过了但还没回溯,为 2 代表走过且回溯,然后用 dis[u] 记录当前点到起点的距离,当 vis[v] 为 1 时,就判断 dis[u] - dis[v] + e[i].w < 0,为真就有负环。这是可以的嘛?

void dfs(int u){
	for(int i = head[u]; i; i = e[i].next){
		int v = e[i].to;
		if(vis[v] == 2) continue;
		if(vis[v] == 1){
			if(dis[u] - dis[v] + e[i].w > 0){
				flag = 1;
				return;
			}
			continue;
		}
		dis[v] = dis[u] + e[i].w;
		vis[v] = 1;
		dfs(v);
		if(flag) return;
	}
	vis[u] = 2;
}
2024/2/29 22:08
加载中...