zoukankan      html  css  js  c++  java
  • 图算法:广度优先遍历

    图的遍历算法包括广度优先遍历和深度优先遍历。其中深度遍历主要用于解答树问题的求解,而深度遍历往往为了获得最短路径解。什么是最短路径解呢?视具体情况而定,比如最短的迭代步数。在一般的隐式图中很常见,因为隐式图的规模往往是无穷的。

    对于一般问题怎么思考呢?我想主要分三个步骤:分析问题(解答树or最短路径);套用框架;剪枝优化

    下面给出广度优先遍历的基本框架,关键词:队列

    #include <queue>
    #include <cstring>
    #include <cstdio>
    
    #define ONLINE 1
    
    using namespace std;
    
    int graph[8][8];
    int visited[8];
    
    queue<int> q;
    
    char s[8];
    
    void bfs(int root)
    {
        q.push(root);
    
        while (!q.empty())
        {
            int k = q.front(); q.pop();
            if (visited[k] != 1)
            {
                printf("%d ", k); visited[k] = 1;
            }
    
            for (int j = 0; j < 8; j++)
            {
                if (graph[k][j] == 1 && visited[j] != 1)
                {
                    q.push(j);    
                }
            }
        }
    }
    
    int main(int argc, char *argv[])
    {
    #if ONLINE 
        freopen("graph.txt", "r", stdin);
    #endif
    
        for (int i = 0; i < 8; i++)
        {
            fscanf(stdin, "%s", s);
            for (int j = 0; j < 8; j++)
            {
                graph[i][j] = s[j] - '0';    
            }
        }
    
        memset(visited, 0, 8 * sizeof(int));
    
        for (int i = 0; i < 8; i++)
        {
            if (visited[i] == 0)
            {
                bfs(i);    
            }
        }
        return 0;    
    }

    明天打算研究倒水问题,应用这一方法。

  • 相关阅读:
    WebXml.com.cn 中国股票行情数据 WEB 服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新
    新浪股票接口AndroidSDK
    Java Applet使用
    Java反射机制
    Java中HashMap排序
    C#委托和事件
    Java操作XML
    迭代器模式
    C# 天气预报
    ptypes中string类的空间分配
  • 原文地址:https://www.cnblogs.com/zjgtan/p/3155704.html
Copyright © 2011-2022 走看看