mst.gms : 최소 스패닝 트리

설명

문제는 네트워크에서 최소 스패닝 트리를 찾는 것입니다.
gamslib 문제의 네트워크(sroute)가 예로 사용됩니다.
알고리즘은 다음을 보여주기 위해 모든 노드에서 시작됩니다.
알고리즘은 모든 노드에서 시작할 수 있습니다.

소형 모델 유형 :메가 슬롯


카테고리 : 메가 슬롯 모델 라이브러리


메인 파일 : mst.gms

$title 최소 스패닝 트리(MST,SEQ=94)

$onText
문제는 네트워크에서 최소 스패닝 트리를 찾는 것입니다.
gamslib 문제의 네트워크(sroute)가 예로 사용됩니다.
알고리즘은 다음을 보여주기 위해 모든 노드에서 시작됩니다.
알고리즘은 모든 노드에서 시작할 수 있습니다.

Hillier, FS 및 Lieberman G J, 운영 연구 소개.
홀든 데이, 샌프란시스코, 1967.

키워드: 최소 신장 트리, 그래프 이론
$offText

내가 '도시'로 설정 / 보스톤, 시카고, 달라스
                 캔자스시티, 로스앤젤레스, 멤피스
                 포틀랜드, 솔트레이크, 워시DC/;

별칭(i,ip,ipp);

매개변수 uarc(i,ip) '아크 및 비용'
                     / 보스턴 .chicago 58, kansas-cty .memphis 27
                       보스턴 .wash-dc 25, 캔자스-cty .salt-lake 66
                       시카고 .kansas-cty 29, kansas-cty .wash-dc 62
                       시카고 .멤피스 32, 로스앤젤레스 .포틀랜드 58
                       Chicago .portland 130, losangeles .salt-lake 43
                       시카고 .솔트레이크 85, 멤피스 .wash-dc 53
                       달라스 .kansas-cty 29, 포틀랜드 .salt-lake 48
                       달라스 .losangeles 85, 달라스 .memphis 28
                       달라스 .솔트레이크 75 /;

세트
   a(i) '할당된 노드'
   u(i) '할당되지 않은 노드'
   nan(i) '새로 할당된 노드'
   s '순서' / 1*10 /;

매개변수
   mst(i,ip,ipp) '모든 노드에서 시작하는 최소 스패닝 트리'
   fold(i,ip,ipp) '접힌 최소 스패닝 트리'
   darc(i,ip) '지향된 호'
   dmin '최소 거리';

darc(i,ip) = max(uarc(i,ip),uarc(ip,i));

옵션 darc:0;
다크 표시;

루프(ip,
   난(ip) = 예;
   a(i) = nan(i);
   u(i) = a(i)가 아님;
   루프(s$카드(nan),
      난(nan) = 아니오;
      dmin = smin((a,u)$darc(a,u), darc(a,u));
      루프((a,u)$(darc(a,u) 및 dmin = darc(a,u)),
         mst(a,u,ip) = ord(들);
         최소 = 0;
      );
      nan(u) = sum(a$(mst(a,u,ip) = ord(s)), yes);
      u(nan) = 아니오;
      a(nan) = 그렇습니다;
   );
);

옵션 mst:0:2:1;
표시 mst;

fold(i,ip,ipp)$(ord(i) < ord(ip)) = mst(i,ip,ipp) - mst(ip,i,ipp);

옵션 접기:0:2:1;
디스플레이 접기;