작은 생 성 트 리 의 Kruskal 구현
그래서 우 리 는 Kruskal 에서 가장 짧 은 길 을 구 한 후에 모든 정점 bfs 에 대해 한 번 에 나무 위의 임의의 두 점 의 가장 긴 변 을 얻어 야 한다.그 다음 에 나무 에 없 는 가장 작은 값 을 찾 는 대신 이전 처럼 매 거 할 수 있 기 를 바 랍 니 다.
두 가지 방법의 시간 잡 도 는 같 지만 Kruskal 의 실현 코드 는 매우 길 어 지지 만 Kruskal 의 실현 은 Prim 이 처리 하기 어 려 운 중 변 을 처리 할 수 있다.
코드 구현 은 Uva 10462 를 예 로 들 면:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define INF 0x3f3f3f3f
#define fi first
#define se second
#define mem(a,b) memset((a),(b),sizeof(a))
const int MAXV=100+3;
const int MAXE=200+3;
struct Edge
{
int from,to,cost;
Edge(int f=0,int t=0,int c=0):from(f),to(t),cost(c){}
bool operator > G[MAXV];//
void init()//
{
for(int i=1;i<=E;++i)
used[i]=false;
for(int i=1;i<=V;++i)
{
par[i]=i;
high[i]=0;
G[i].clear();
}
}
int findfather(int x)
{
return par[x]=par[x]==x?x:findfather(par[x]);
}
bool unite(int a,int b)
{
int fa=findfather(a),fb=findfather(b);
if(fa==fb)
return false;
if(high[fa]>high[fb])
par[fb]=fa;
else
{
par[fa]=fb;
if(high[fa]==high[fb])
++high[fb];
}
return true;
}
void bfs(int s)
{
mem(vis,0);
vis[s]=true;
the_max[s][s]=0;
queue que;
que.push(s);
while(!que.empty())
{
int u=que.front(); que.pop();
for(int i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.