使用贪心算法解决最小生成树问题。
生活随笔
收集整理的這篇文章主要介紹了
使用贪心算法解决最小生成树问题。
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用貪心算法解決最小生成樹問題。
#include<iostream> #include<algorithm> using namespace std; const int MAX=100; const int MAX_length=10000;int n,m; int G[MAX][MAX];//相鄰兩邊的長 int d[MAX]; bool V[MAX]={false};int prim(){int sum=0;V[1]=true;d[1]=0;for(int i=1; i<=n; i++)d[i]=G[1][i];for(int i=1;i<n;i++){//n-1條邊 int index=0,MIN=MAX_length;for(int j=1;j<=n;j++){//每次從頭開始搜索最短路徑 if(V[j]==false && d[j]<MIN){//MIN不斷改變求出當(dāng)前最小值 index=j;MIN=d[j];}}V[index]=true;//true表示該點(diǎn)已被用 sum+=MIN;for(int v=1;v<=n;v++){if(V[v]==false && G[index][v]<d[v]){d[v]=G[index][v];//進(jìn)行更新 ,如果剛剛更新的點(diǎn)連接的邊更短,用更短的邊 替換原來的邊 }}}return sum; } int main() {int u,v,w;cout<<"輸入個數(shù)和邊數(shù):";cin>>n>>m;fill(G[0],G[0]+MAX*MAX,MAX_length);//把所有空間的值置為MAX cout<<"輸入兩個點(diǎn)和邊長:"<<endl;for(int i=1;i<=m;i++){//把每條邊長輸入數(shù)組 ,有邊則覆蓋之前的MAX cin>>u>>v>>w;G[u][v]=G[v][u]=w;}int sum=prim();cout<<"貪心求最小生成樹值為:"sum;}總結(jié)
以上是生活随笔為你收集整理的使用贪心算法解决最小生成树问题。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言延时函数_SystemVerilo
- 下一篇: 01背包问题回溯法