深搜遍历图找最短路求算时间复杂度
  • 板块学术版
  • 楼主AwuOi
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/2/6 23:37
  • 上次更新2025/2/7 11:09:55
查看原帖
深搜遍历图找最短路求算时间复杂度
1213769
AwuOi楼主2025/2/6 23:37

我写了一个深度优先搜索遍历图以找到这个图指定两点之间的最短路程,但蒟蒻不会算深搜的时间复杂度,求助大佬计算。
(码风有点丑别嫌弃)

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct Edge{
	int v, w;
	Edge(int iv, int iw){
		v=iv, w=iw;
	}
};
vector<Edge> a[100005];
bool mark[100005], forbiden;
int n, m, sp, ep, cnt, ans=1000000000;
void dfs(int np){
	if(np == ep){
		ans=min(ans, cnt);
		return ;
	}
	
	for(auto i : a[np]){
		if(mark[i.v]) continue;
		mark[i.v]=true;
		cnt+=i.w;
		dfs(i.v);
		if(forbiden){
			forbiden=false;
			continue;
		}
		mark[i.v]=false;
		cnt-=i.w;
	}
}
int main(){
	scanf("%d%d%d%d", &n, &m, &sp, &ep);
	for (int i=1;i<=m;i++){
		int x, y, z;
		scanf("%d%d%d", &x, &y, &z);
		a[x].push_back(Edge(y, z));
		a[y].push_back(Edge(x, z));
	}
	dfs(sp);
	printf("%d", ans);
	return 0;
}
2025/2/6 23:37
加载中...