zoukankan      html  css  js  c++  java
  • 1013. Battle Over Cities 用dfs计算联通分量

    使用一个标记数组,标记 节点是否已访问

    int 连通度=0

     dfs(node i)

    {标记当前节点为以访问

    for(每一个节点)

    {if(当前几点未访问 并且 从i到当前节点有直接路径)

        dfs(当前节点)

    }}

    main()

    {

    ....

    for(对于每个点)

    {如果mark【i】==false;//未被访问

      {连通度++;dfs(i);}

    ...

    }

    对于不管是任何带有循环性质的结构(dfs ,bfs,while,for)

    由于边界问题,如果处理不当,会给思路和编码带来巨大的困难

    一种解决方式是,循环当期判断的元素,就是当前要处理,但还没有处理的元素,而不在外部干预

    例如:使用while(++i){...}而不是while(i++){}

    比如上面的dfs (i)对于i,不是在外界先把mark[i]=true 再进dfs,而是写成dfs(i){ mark[i]=true};

    这样会使得思考难度大幅度下降,同时,减少一些专门用于边界情况的判断及处理的代码

  • 相关阅读:
    mysql批量导入删除
    sql查重去除id最小值
    Rest构建分布式 SpringCloud微服务架构项目
    Django模板语言及视图
    Django模板语言
    面向对象进阶
    初识面向对象
    os模块和sys模块
    random模
    时间模块
  • 原文地址:https://www.cnblogs.com/mgfsos/p/10592152.html
Copyright © 2011-2022 走看看