最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP實現(xiàn)克魯斯卡爾算法實例解析

 更新時間:2014年08月22日 11:49:00   投稿:shichen2014  
這篇文章主要介紹了PHP實現(xiàn)克魯斯卡爾算法實例解析,是PHP程序設(shè)計中一個比較經(jīng)典的應(yīng)用,需要的朋友可以參考下

本文實例展示了PHP實現(xiàn)的格魯斯卡爾算法(kruscal)的實現(xiàn)方法,分享給大家供大家參考。相信對于大家的PHP程序設(shè)計有一定的借鑒價值。

具體代碼如下:

<?php
require 'edge.php';
$a = array(
  'a',
  'b',
  'c',
  'd',
  'e',
  'f',
  'g',
  'h',
  'i'
);
$b = array(
  'ab' => '10',
  'af' => '11',
  'gb' => '16',
  'fg' => '17',
  'bc' => '18',
  'bi' => '12',
  'ci' => '8',
  'cd' => '22',
  'di' => '21',
  'dg' => '24',
  'gh' => '19',
  'dh' => '16',
  'de' => '20',
  'eh' => '7',
  'fe' => '26'
);
$test = new Edge($a, $b);
print_r($test->kruscal());
?>

edge.php文件代碼如下:

<?php
//邊集數(shù)組的邊類
class EdgeArc {
  private $begin; //起始點
  private $end; //結(jié)束點
  private $weight; //權(quán)值
  public function EdgeArc($begin, $end, $weight) {
    $this->begin = $begin;
    $this->end = $end;
    $this->weight = $weight;
  }
  public function getBegin() {
    return $this->begin;
  }
  public function getEnd() {
    return $this->end;
  }
  public function getWeight() {
    return $this->weight;
  }
}
class Edge {
  //邊集數(shù)組實現(xiàn)圖
  private $vexs; //頂點集合
  private $arc; //邊集合
  private $arcData; //要構(gòu)建圖的邊信息
  private $krus; //kruscal算法時存放森林信息
  public function Edge($vexsData, $arcData) {
    $this->vexs = $vexsData;
    $this->arcData = $arcData;
    $this->createArc();
  }
  //創(chuàng)建邊
  private function createArc() {
    foreach ($this->arcData as $key => $value) {
      $key = str_split($key);
      $this->arc[] = new EdgeArc($key[0], $key[1], $value);
    }
  }
  //對邊數(shù)組按權(quán)值排序
  public function sortArc() {
    $this->quicklySort(0, count($this->arc) - 1, $this->arc);
    return $this->arc;
  }
  //采用快排
  private function quicklySort($begin, $end, &$item) {
    if ($begin < 0($begin >= $end)) return;
    $key = $this->excuteSort($begin, $end, $item);
    $this->quicklySort(0, $key - 1, $item);
    $this->quicklySort($key + 1, $end, $item);
  }
  private function excuteSort($begin, $end, &$item) {
    $key = $item[$begin];
    $left = array();
    $right = array();
    for ($i = ($begin + 1); $i <= $end; $i++) {
      if ($item[$i]->getWeight() <= $key->getWeight()) {
        $left[] = $item[$i];
      } else {
        $right[] = $item[$i];
      }
    }
    $return = $this->unio($left, $right, $key);
    $k = 0;
    for ($i = $begin; $i <= $end; $i++) {
      $item[$i] = $return[$k];
      $k++;
    }
    return $begin + count($left);
  }
  private function unio($left, $right, $key) {
    return array_merge($left, array(
      $key
    ) , $right);
  }
  //kruscal算法
  public function kruscal() {
    $this->krus = array();
    $this->sortArc();
    foreach ($this->vexs as $value) {
      $this->krus[$value] = "0";
    }
    foreach ($this->arc as $key => $value) {
      $begin = $this->findRoot($value->getBegin());
      $end = $this->findRoot($value->getEnd());
      if ($begin != $end) {
        $this->krus[$begin] = $end;
        echo $value->getBegin() . "-" . $value->getEnd() . ":" . $value->getWeight() . "\n";
      }
    }
  }
  //查找子樹的尾結(jié)點
  private function findRoot($node) {
    while ($this->krus[$node] != "0") {
      $node = $this->krus[$node];
    }
    return $node;
  }
}
?> 

感興趣的讀者可以調(diào)試運行一下本文克魯斯卡爾算法實例,相信會有新的收獲。

相關(guān)文章

  • 兩個強(qiáng)悍的php 圖像處理類1

    兩個強(qiáng)悍的php 圖像處理類1

    基本圖片處理,用于完成圖片縮入,水印添加,當(dāng)水印圖超過目標(biāo)圖片尺寸時,水印圖能自動適應(yīng)目標(biāo)圖片而縮小,水印圖可以設(shè)置跟背景的合并度
    2009-06-06
  • PHP封裝cURL工具類與應(yīng)用示例

    PHP封裝cURL工具類與應(yīng)用示例

    這篇文章主要介紹了PHP封裝cURL工具類與應(yīng)用,結(jié)合實例形式分析了php基于面向?qū)ο蠓庋b的curl請求、響應(yīng)、參數(shù)設(shè)置等相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • thinkphp jquery實現(xiàn)圖片上傳和預(yù)覽效果

    thinkphp jquery實現(xiàn)圖片上傳和預(yù)覽效果

    這篇文章主要為大家詳細(xì)介紹了thinkphp上傳圖片功能,和jquery預(yù)覽圖片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • php簡單瀏覽目錄內(nèi)容的實現(xiàn)代碼

    php簡單瀏覽目錄內(nèi)容的實現(xiàn)代碼

    本篇文章是對php簡單瀏覽目錄內(nèi)容的實現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php用戶注冊時常用的檢驗函數(shù)實例總結(jié)

    php用戶注冊時常用的檢驗函數(shù)實例總結(jié)

    這篇文章主要介紹了php用戶注冊時常用的檢驗函數(shù),以類的形式實例總結(jié)了用戶名驗證、郵箱驗證、QQ驗證等常用的驗證技巧,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • php 禁止頁面緩存輸出

    php 禁止頁面緩存輸出

    主要設(shè)計思想就是讓它在過去就“失效",防止重復(fù)提交等返回操作。
    2009-01-01
  • PHP中文字符串截斷無亂碼解決方法

    PHP中文字符串截斷無亂碼解決方法

    這篇文章主要為大家詳細(xì)介紹了PHP獲取用戶客戶端真實IP的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 搭建自己的PHP MVC框架詳解

    搭建自己的PHP MVC框架詳解

    這篇文章主要介紹了搭建自己的PHP MVC框架的方法,詳細(xì)分析了php構(gòu)建MVC框架的具體步驟、相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2017-08-08
  • PHP操作redis實現(xiàn)的分頁列表,新增,刪除功能封裝類與用法示例

    PHP操作redis實現(xiàn)的分頁列表,新增,刪除功能封裝類與用法示例

    這篇文章主要介紹了PHP操作redis實現(xiàn)的分頁列表,新增,刪除功能封裝類與用法,結(jié)合實例形式分析了php針對redis數(shù)據(jù)庫基本的連接、查詢、添加、分頁等操作封裝與使用技巧,需要的朋友可以參考下
    2018-08-08
  • php使用curl實現(xiàn)ftp文件下載功能

    php使用curl實現(xiàn)ftp文件下載功能

    這篇文章主要為大家詳細(xì)介紹了php使用curl實現(xiàn)ftp文件下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

扎囊县| 明水县| 曲麻莱县| 理塘县| 兴业县| 贵定县| 休宁县| 日土县| 铅山县| 佳木斯市| 黎川县| 新绛县| 凌云县| 吴堡县| 大厂| 平湖市| 博野县| 桐庐县| 应城市| 台北县| 垣曲县| 石河子市| 阳原县| 融水| 专栏| 九台市| 防城港市| 大埔县| 麦盖提县| 什邡市| 洛扎县| 白银市| 阜平县| 阿坝县| 古蔺县| 龙游县| 大关县| 拉萨市| 建始县| 三门县| 左贡县|