最小生成树
Prim:类似于Dijsktra算法
不过两者同源(看模板就会发现这俩长得都像套了BFS模板,事实上这两个算法都借鉴了BFS的思想)
code(先咕了)
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int p=222;
int m[p][p],dis[p];
int n;
int ans;
void in(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&m[i][j]);
}
}
}
void prim(int x){
ans=0;
for(int i=1;i<=n;i++){
dis[i]=m[x][i];
}
dis[x]=0;
for(int i=2;i<=n;i++){
int min=0x7f7f7f7f,k;
for(int j=1;j<=n;j++){
if(dis[j]<min&&dis[j]!=0){
min=dis[j];
k=j;
}
}
ans+=dis[k];
dis[k]=0;
for(int j=1;j<=n;j++){
if(dis[j]>m[k][j]){
dis[j]=m[k][j];
}
}
}
}
void out(){
printf("%d",ans);
}
int main(){
in();
prim(2);
out();
return 0;
}
Kruscal:并查集
又是那个星星玩意折磨我
code(咕)
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int p=100001;
struct edge{
int s;
int t;
int v;
}e[p];
int f[p],n,m;
int ans,t;
int find(int x){
if(f[x]!=x){
f[x]=find(f[x]);
}
return f[x];
}
bool cmp(const edge &a,const edge &b){
return a.v<b.v;
}
void in(){
for(int i=1;i<=m;i++){
scanf("%d%d%d",&e[i].s,&e[i].t,&e[i].v);
}
sort(e+1,e+m+1,cmp);
}
void renew(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
f[i]=i;
}
}
void work(){
for(int i=1;i<=m;i++){
int x=e[i].s,y=e[i].t;
int fx=find(x),fy=find(y);
if(fx!=fy){
f[fx]=fy;
ans=e[i].v;
t++;
}
if(t==n-1){
break;
}
}
}
void out(){
printf("%d %d\n",t,ans);
}
int main(){
renew();
in();
work();
out();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具