1.DFS

void dfs(){
	if(达到条件){
		保存答案;
		return; 
	}
	for(遍历所有情况){
		if(check(当前情况)){
			其他; 
			dfs(当前情况); 
			回溯; 
		}
	}
}

2.Dijstra

void djstra(int s,int e){
    priority_queue<pair<int,int>q;
    int dis[N];
    bool vis[N];
    q.push(make_pair<0,int>);
    vis[s]=0;
    for(int i=1;i<=n;i++){
        dis[i]=2100000000;
    }
    dis[s]=0;
    while(!q.empty()){
      int u=q.top().second;
      q.pop();
      if(vis[u])continue;
      vis[u]=1;
      for(auto j:g[u]){
         int v=j.first,w=j.second;
         if(dis[v]>dis[u]+w){
             dis[v]=dis[u]+w;
             q.push(make_pair<dis[v],v>);
    }
}

3.Bellman-Ford

#include<bits/stdc++.h>
using namespace std;
struct ed{
    int u,v,w;
};
vector<ed>g;
int dis[2005];
int n,m;
int a,b,c;
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>a>>b>>c;
        g.push_back(ed{a,b,c});
        g.push_back(ed{b,a,c});
    }
    for(int i=2;i<=n;i++){
        dis[i]=2100000000;
    }
    bool f=0;
    for(int i=1;i<=n;i++){
        f=0;
        for(auto j:g){
            int u=j.u,v=j.v,w=j.w;
            if(dis[u]==2100000000)continue;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                f=1;
            }
        }
        if(!f){
            break;
        }
    }
    cout<<dis[n];
    return 0;
}