タグ

ブックマーク / betrue12.hateblo.jp (2)

  • C++のイテレータを視覚的に理解する(競プロ向け) - ARMERIA

    この記事はCompetitive Programming (2) Advent Calendar 2019 - Adventarの4日目の記事です。 私がC++競技プログラミングをやり始めた際によく分からなかったものの筆頭がイテレータでした。便利でv.begin(), v.end()のようなお決まりの書き方はできても、少し普段と違うことをしようとすると混乱しがちです。 このようなものは手元で図を描いて整理できるようになる、つまり視覚的に理解できることがとても大事だと思います。そこでイテレータについて「こういう風に理解すると図示しやすくなるかもよ」という視覚的な理解を提示したいと思います。 競技プログラミングでよく使う処理を中心に扱っていきますが、それ以外でC++を書く人にとっても理解の助けになる…かもしれません。 std::vectorのイテレータ まずは一番分かりやすいものからいきます

    C++のイテレータを視覚的に理解する(競プロ向け) - ARMERIA
    xef
    xef 2020/01/02
  • 01-BFSのちょっと丁寧な解説 - ARMERIA

    先日Twitterで少し話題になったので書いてみます。データ構造とアルゴリズム Advent Calendar 2018 の8日目の記事でもあります。 「01-BFS」というものをちょっと丁寧に解説します。これは以下のような問題を解くことができるアルゴリズムです。 辺の長さが0または1である有向グラフにおいて、ある1つの始点から全頂点への最短路の長さを効率的な計算時間で求めよ。 ※図のグラフは非循環(DAG)ですが、必ずしもDAGである必要はないです。 この記事では01-BFSの解説の前に「ダイクストラ法」「幅優先探索」をそれぞれ復習し、その流れで01-BFSを解説します。必須ではありませんが、これら2つのコードを書いたことがない人は是非そちらからやってみてください。 ダイクストラ法 多くの人は 深さ/幅優先探索→ダイクストラ法 の順に学ぶと思いますが、今回は逆の記載順にしています。 ダイ

    01-BFSのちょっと丁寧な解説 - ARMERIA
  • 1