Dijkstra最短路:
### **Dijkstra最短路:**#include <bits/stdc++.h>
using namespace std;
const int N = 510;
int n, m,map[N][N],dist[N];
bool st[N];
int dijkstra()
{int i,j,t; memset(dist, 0x3f, sizeof dist);dist[1] = 0;for (i = 0; i < n - 1; i ++ ){t = -1;for (j = 1; j <= n; j ++ )if (!st[j] && (t == -1 || dist[t] > dist[j])) t = j;st[t] = true;for (j = 1; j <= n; j ++ )dist[j] = min(dist[j], dist[t] + map[t][j]);}if (dist[n]==0x3f3f3f3f) return -1;return dist[n];
}int main()
{scanf("%d%d", &n, &m);memset(map, 0x3f, sizeof map);while (m -- ){int x,y,z;scanf("%d%d%d",&x,&y,&z);map[x][y] = min(map[x][y],z);}printf("%d\n", dijkstra());return 0;
}
最小生成树:
### 最小生成树:#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+7;
int minn[N];
int g[N][N];
int vis[N];
ll sum=0;
int n,m;
void pr(){minn[1]=0;for(int i=1;i<=n;i++){int t=-1;for(int j=1;j<=n;j++){if(!vis[j]&&(t==-1||minn[t]>minn[j])){t=j;}}if(minn[t]==0x3f3f3f3f||t==-1){cout<<"orz";return ;}vis[t]=1;sum+=minn[t];for(int j=1;j<=n;j++){if(!vis[j])minn[j]=min(minn[j],g[j][t]);}}cout<<sum;
}
void solve(){cin>>n>>m;memset(g,0x3f,sizeof g);memset(minn,0x3f,sizeof minn);for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;g[a][b]=min(g[a][b],c);g[b][a]=min(g[b][a],c);}pr();
}
int main(){int T=1;while(T--){solve();}return 0;
}