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;
}