PHP 有n 個長為m+1 的字串, 如果某個字串的最後m 個字元與某個字串的前m 個字元匹配,則兩個字串可以聯結, 問這n 個字串最多可以連成一個多長的字串,如果出現迴圈,則返回錯誤

來源:互聯網
上載者:User
 1 <?php 2     #有n個字串,每個數組長度m+1,如果數組的後m個元素和另一個數組的前m個元素相同,則兩個數組可以相連 3     #求n個數組中串連起來的最長路徑是多少,如果遇到環路則報錯退出 4  5     function longest($a, $m) { 6         $len = count($a); 7         #把二維數組$a的每個字串元素看成一個節點 8         #建立節點之間的聯通關係數組g,g[i][j]代表節點ij之間的最長路徑 9 10         #初始化g,講可連通的節點值設為111         $g = array();12         for ($i = 0; $i < $len; $i++) {13             for ($j = 0; $j < $len; $j++) {14                 $lastm = substr($a[$i], 1);15                 $firstm = substr($a[$j], 0, $m);16                 if ($lastm == $firstm) {17                     $g[$i][$j] = 1;18                 } else {19                     $g[$i][$j] = 0;20                 }21             }22         }23 24         #使用弗洛伊德演算法計算最長的路徑25         for ($k = 0; $k < $len; $k++) {26             for ($i = 0; $i < $len; $i++) {27                 for ($j= 0; $j < $len; $j++) {28                     if ($g[$i][$k] > 0 && $g[$k][$j] > 0) {29                         $dist = $g[$i][$k] + $g[$k][$j];30                         if ($dist > $g[$i][$j]) {31                             $g[$i][$j] = $dist;32                         }33                     }34                 }35             }36         }37 38         #檢測環路39         #環路包括兩種,一種是i->i自己到自己,另一種是,i->...->k->...->i40         for ($i = 0; $i < $len; $i++) {41             if ($g[$i][$i] >= 1) die("There is a circle");42         }43 44         #求出最長路徑45         $max = 0;46         for ($i = 0; $i < $len; $i++) {47             $max = max(max($g[$i]), $max);48         }49 50         return $max;51     }52 53     $a = array(54             "abcd",  55             "bcde",  56             "cdea",  57             "deab",  58             "eaba",  59             "abab",  60             "deac",  61             "cdei",  62             "bcdf",  63             "cdfi",  64             "dfic",  65             "cdfk",  66             "bcdg",67         );68 69     print_r(longest($a, 3));70 ?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.