Tutorial lengkap tentang melaksanakan algoritma teori graf dalam PHP

王林
Lepaskan: 2024-05-07 21:45:02
asal
898 orang telah melayarinya

Artikel ini memperkenalkan langkah-langkah untuk melaksanakan algoritma teori graf menggunakan PHP. Algoritma termasuk carian pertama luas (BFS), carian pertama mendalam (DFS) dan algoritma Dijkstra, yang boleh digunakan untuk menyelesaikan masalah dunia sebenar seperti analisis rangkaian sosial dan perancangan laluan.

用 PHP 实现图论算法的完整教程

Tutorial lengkap tentang melaksanakan algoritma teori graf dalam PHP

Pengenalan

Teori graf memainkan peranan penting dalam sains komputer, dan ia digunakan secara meluas dalam perancangan dan penjadualan rangkaian sosial, analisis laluan sosial. bidang lain. Dalam tutorial ini, kami akan melihat secara mendalam langkah-langkah untuk melaksanakan algoritma teori graf yang paling biasa menggunakan PHP.

Apakah itu gambar?

Graf ialah struktur data yang terdiri daripada dua set: bucu (mewakili unsur dalam graf) dan tepi (mewakili sambungan antara bucu). Graf boleh diwakili menggunakan senarai bersebelahan atau matriks bersebelahan. Algoritma teori graf

// PHP 代码示例

function BFS($graph, $start) {
  $visited = [];  // 已访问的顶点
  $queue = [$start];  // 队列,用于广度优先遍历
  
  while (!empty($queue)) {
    $current = array_shift($queue);  // 从队列中取出当前访问的顶点
    if (isset($visited[$current])) {
      continue; // 如果当前顶点已访问,则跳过
    }
    
    $visited[$current] = true;  // 标记顶点已访问
    echo $current . "\n";  // 输出当前顶点

    // 将当前顶点的邻接顶点添加到队列中
    foreach ($graph[$current] as $neighbor) {
      if (!isset($visited[$neighbor])) {
        $queue[] = $neighbor;
      }
    }
  }
}
Salin selepas log masuk

Depth First Search (DFS)

DFS serupa dengan BFS, tetapi ia meneroka graf dengan cara yang mendalam dahulu. Ia bermula pada bucu permulaan, meneruskan lebih dalam ke bucu bersebelahan yang belum dilawati, sehingga ia tidak dapat meneroka lebih jauh, dan kemudian jatuh semula ke bucu bersebelahan yang belum diterokai sepenuhnya.

// PHP 代码示例

function DFS($graph, $start) {
  $visited = [];  // 已访问的顶点
  $stack = [$start];  // 栈,用于深度优先遍历
  
  while (!empty($stack)) {
    $current = array_pop($stack);  // 从栈中取出当前访问的顶点
    if (isset($visited[$current])) {
      continue; // 如果当前顶点已访问,则跳过
    }
    
    $visited[$current] = true;  // 标记顶点已访问
    echo $current . "\n";  // 输出当前顶点

    // 将当前顶点的邻接顶点添加到栈中
    foreach ($graph[$current] as $neighbor) {
      if (!isset($visited[$neighbor])) {
        $stack[] = $neighbor;
      }
    }
  }
}
Salin selepas log masuk

**Algoritma Dykstra

Algoritma Dykstra digunakan untuk mencari laluan terpendek dari bucu sumber yang ditentukan ke semua bucu lain dalam graf.

// PHP 代码示例

function Dijkstra($graph, $start) {
  $distances = [];  // 顶点到源顶点的距离
  $visited = [];  // 已访问的顶点
  
  // 初始化
  foreach ($graph as $vertex => $edges) {
    $distances[$vertex] = ($vertex === $start) ? 0 : INF;
  }
  
  while (!empty($visited)) {
    $current = min($distances, $visited);  // 查找距离源顶点最近的未访问顶点
    $visited[$current] = true;  // 标记顶点已访问
    
    foreach ($graph[$current] as $neighbor => $weight) {
      $new_distance = $distances[$current] + $weight;
      if ($new_distance < $distances[$neighbor]) {
        $distances[$neighbor] = $new_distance;
      }
    }
  }

  return $distances;  // 返回顶点到源顶点的最短路径
}
Salin selepas log masuk
Kes praktikal

Banyak masalah praktikal boleh diselesaikan menggunakan algoritma teori graf. Sebagai contoh, kita boleh menggunakan BFS untuk mencari laluan terpendek dalam rangkaian sosial, atau menggunakan algoritma Dijkstra untuk merancang laluan terpantas dari satu bandar ke bandar lain.

Kesimpulan

Tutorial ini menyediakan panduan lengkap untuk melaksanakan algoritma teori graf menggunakan PHP. Algoritma ini mempunyai aplikasi yang meluas dalam banyak bidang sains komputer, dan memahami cara ia berfungsi adalah penting bagi mana-mana pengaturcara yang ingin mendapatkan pemahaman yang lebih mendalam tentang struktur dan algoritma graf.

Atas ialah kandungan terperinci Tutorial lengkap tentang melaksanakan algoritma teori graf dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!