ホームページ > バックエンド開発 > PHPチュートリアル > クラスカル アルゴリズムの PHP 実装サンプル分析、クラスカル アルゴリズムの例_PHP チュートリアル

クラスカル アルゴリズムの PHP 実装サンプル分析、クラスカル アルゴリズムの例_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:20:10
オリジナル
871 人が閲覧しました

クラスカルアルゴリズムのサンプル分析のPHP実装、クラスカルアルゴリズムのサンプル

この記事の例は、PHPで実装されたKruscalアルゴリズム(kruscal)の実装方法を示しており、参考のために皆さんに共有します。これは、すべての人の PHP プログラム設計にとって一定の参考になると思います。

具体的なコードは次のとおりです:

リーリー

edge.php ファイルのコードは次のとおりです:

リーリー

興味のある読者は、この記事の Kruskal アルゴリズムの例をデバッグして実行すると、新たなメリットが得られると思います。

クラスカルアルゴリズム

隣接リストを使用してもよろしいですか?クラスカルのアルゴリズムではエッジとコストのみを保存する必要があるため、隣接リストを使用することはあまり意味がなく、並べ替えも簡単ではありません。
以下は、ネットワーク生成の最小コストを解決し、生成ネットワーク内のパスを出力する、和集合探索によって実装されたクラスカルアルゴリズムです。
#include
#include
名前空間 std を使用;
int p[1001],rank[1001];
int cho[1001];
structedge
{
int u,v,w;/ /uは始点の番号、vは終点の番号、wはパスのコストを表します
}e[15001];
int n,m;//nは点の数を表し、mはパスの数を表します
void Init()
{
int i;
for(i=1;i<=n;i++)
{
p[i]=i;
Rank[i]=0;
}
}
bool cmp(edge a,edge b)
{
return a.w}
int Find(int t)
{
if(p[t]!=t)
{
p[t]=Find(p [t]);
}
return p[t];
}
int Union(int a,int b)
{
int x,y;
x=Find(a);
y=Find(b);
if(ランク[x] >ランク[y])
{
p[y]=x;
}
else
{
p[x]=y;
if(ランク[x]==ランク[y] ])
ランク[y] ++;
}
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
int i,j;
for(i =0;i {
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
}
Init( );
sort(e, e+m,cmp);
int cnt=0,ans=0;
for(i=0;i {
if(Find(e[i].u )!=Find(e[ i].v))
{
cnt++;
ans+=e[i].w;
Union(e[i].u,e[i].v);
cho[+ +cho[0]]= i;
if(cnt==n-1)
Break;
}
}
printf("%d\n",ans);
for(j=1;j {
printf("%d %d\n",e[cho[j]].u,e[cho[j]].v);
}
return 0;
}。 ..本文の続き>>

クラスカルのアルゴリズムを実装するにはどうすればよいですか?

特定のトピックと組み合わせるのが最善です。ここに完全なコードが記載されたトピックがあります。blog.csdn.net/...751786
他にもたくさんありますので、興味のある方はご覧ください。興味あります

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/868246.html技術記事 PHP で実装された Kruscal アルゴリズムの例の分析、Kruscal アルゴリズムの例 この例は、PHP で実装された Kruscal アルゴリズム (kruscal) の実装方法を示しています。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート