zoukankan      html  css  js  c++  java
  • 图算法(一)——基本图算法(BFS,DFS及其应用)(1)

    1)BFS

    广度优先搜索:给定源节点s,生成广度优先搜索树
    广度优先搜索树中从节点s到节点v的简单路径对应的就是s到v的最短路径(边数最少的路径)
    广度优先:将已发现节点与未发现节点之间的边界(灰色节点),沿其广度方向向外扩张

     1 #include<stack>
     2 #include<vector>
     3 #include<queue>
     4 #include<algorithm>
     5 
     6 using namespace std;
     7 #define INF 99999999
     8 #define NIL -1
     9 int n;
    10 int g[1000][1000];
    11 struct Node
    12 {
    13     int color;
    14     int d;            //distance
    15     int pi;            //pi,ancestor
    16 }t[1000];
    17 queue<int> q;
    18 
    19 void BFS(int s)
    20 {
    21     for (int i=0;i<n;i++)
    22     {
    23         if (i!=s)
    24         {
    25             t[i].color = 0;
    26             t[i].d = INF;
    27             t[i].pi = NIL;
    28         }
    29     }
    30     t[s].color = 1;
    31     t[s].d = 0;
    32     t[s].pi = NIL;
    33     q.push(s);
    34     while (!q.empty())
    35     {
    36         int u = q.front();
    37         q.pop();
    38         for (int v=0;v<n;v++)
    39         {
    40             if ((g[u][v] == 1)&&(u != v))
    41             {    
    42                 if (t[v].color == 0)
    43                 {
    44                     t[v].color = 1;
    45                     t[v].d = t[u].d + 1;
    46                     t[v].pi = u;
    47                     q.push(v);
    48                 }
    49             }
    50         }
    51         t[u].color = 1;
    52     }
    53 }
    54 
    55 /*
    56 int main()
    57 {
    58     while (cin>>n)
    59     {
    60         for (int i=0;i<n;i++)
    61         {
    62             for (int j=0;j<n;j++)
    63             {
    64                 cin>>g[i][j];
    65             }
    66         }
    67         int s;
    68         cin>>s;
    69         BFS(s);
    70         for (int i=0;i<n;i++)
    71         {
    72             cout<<i<<" "<<t[i].d<<" "<<t[i].pi<<endl;
    73         }
    74     }
    75     return 0;
    76 }
    77 */

      

  • 相关阅读:
    Matlab之快速傅里叶变换
    关于Debug和Release的区别 (VS C#)
    QSqlQuery::value: not positioned on a valid record
    UML系列图--用例图
    SQLite 数据类型总结
    c++构造函数
    求Fibonacci数列通项公式
    ObjectMapper类
    命令行运行jar 提示找不到主程序解决方案
    httpclient框架实现接口自动化的思路(二)
  • 原文地址:https://www.cnblogs.com/giddens/p/4124956.html
Copyright © 2011-2022 走看看