核心:贪心思想 只能用于无向图 prim和dijkstra异同
在这里插入prim代码: #include<iostream> #include<cstring> #include<algorithm> #define NIL -1 #define INF 0x3f3f3f3f using namespace std; const int white=0,gray=1,black=2,maxn=1e3+10; int n,color[maxn],dis[maxn],parent[maxn],graph[maxn][maxn]; int prim() { for(int i=0;i<n;i++){color[i]=white;dis[i]=INF;parent[i]=NIL;} dis[0]=0,color[0]=gray; while(1){ int minv=INF,u=-1; for(int i=0;i<n;i++){ if(color[i]!=black&&dis[i]<minv){ minv=dis[i]; u=i; } } color[u]=black; if(u==-1)break; for(int v=0;v<n;v++){ if(color[v]!=black&&graph[u][v]!=NIL){ if(graph[u][v]<dis[v]){ dis[v]=graph[u][v]; color[v]=gray; parent[v]=u; } } } } int sum=0; for(int i=0;i<n;i++){ if(parent[i]!=NIL)sum+=graph[i][parent[i]]; } return sum; } int main() { memset(graph,INF,sizeof(graph)); cin>>n; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>graph[i][j]; } } cout<<prim()<<endl; return 0; } 代码片