この記事の例は、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
他にもたくさんありますので、興味のある方はご覧ください。興味あります