グラフ理論と行列操作アルゴリズム
100. 島の最大面積
与えられた1(陸地)と0(水)からなる行列において、島の最大面積を計算します。島は水平または垂直方向に隣接する陸地で構成され、周囲が水で囲まれているものとします。
from collections import deque
def max_area_of_island(grid):
rows, cols = len(grid), len(grid[0])
max_area = 0
for i in range(rows):
for j in ...
6月18日 17:18 投稿
グラフ理論のアルゴリズム実装ノート
1. 隣接行列を用いたDFS(再帰実装)
class GraphStructure {
public:
GraphStructure(int nodes);
void addConnection(int src, int dst);
void traverseDFS(int startNode);
private:
int nodeCount;
vector<vector<int>> adjacencyMatrix;
vector<bool> visitedFlags;
void dfsRecursive(int current);
};
GraphStruc ...
6月15日 20:13 投稿
グラフ理論における関節点、橋、および二重連結成分の解析
グラフ理論において、無向グラフの構造を分析する重要な概念として関節点、橋、二重連結成分があります。これらの概念はグラフの連結性を評価し、グラフの脆弱性を特定するために不可欠です。
関節点 (Articulation Points)
概要
無向グラフから特定の頂点を削除した後、グラフの連結成分の数が増加する場合、その頂点は関節点と呼ばれます。関節点はグラフの連結性を維 ...
6月14日 20:54 投稿
農場ネットワークの最小全域木問題
問題概要
ジョン農場主が町長に選出されました!彼の選挙公約の一つは、町全体にインターネットを導入し、すべての農場を接続することです。もちろん、彼はあなたの助けが必要です。
ジョンはすでに自身の農場に高速ネットワーク回線を設置済みであり、これを他の農場と共有したいと考えています。費用を最小限に抑えるため、すべての農場を接続する最短の光ファイバーを ...
6月14日 18:40 投稿
C++プログラミングコンテスト問題集と解答例
L1-1 挨拶出力
解法
指定されたテキストをそのまま出力する。
実装例
#include <iostream>
using namespace std;
int main() {
cout << "ありがとう!\\(>_<)/" << endl;
return 0;
}
L1-2 平均速度計算
実装例
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int distance, time;
cin & ...
6月10日 20:29 投稿
グラフ理論:K値の最大化問題 - 二分探索とシミュレーションによる解法
グラフ理論:K値の最大化問題 - 二分探索とシミュレーションによる解法
問題文
n個の頂点とm辺の単純無向グラフが与えられます。このグラフを完全グラフに補完する必要があります。補完のルールは、あらかじめパラメータKを選び、各ステップで「頂点uとvの間に辺が存在せず、かつ両頂点の次数の和がK以上」である辺のみを追加することです。このルールに従って辺を追加し ...
6月6日 17:45 投稿
牛客プログラミングコンテスト89 解法解説
A. 牛牛吃米粒
入力: 整数 n, k と符号なし整数 s、および k 個の位置 a_i。各ビット位置が制限されていないか検証し、s のビットが立っている位置が禁止領域と重なる場合は "NO"、それ以外は "YES" を出力。
#include <iostream>
#include <vector>
using namespace std;
int main() {
unsigned long long s;
int n, k;
cin >> n >> k;
vect ...
6月5日 22:18 投稿
2023年伝智杯プログラミング競技予選ソリューション
文字列連結
2つの文字列を入力として受け取り、連結して出力します。空白を含む可能性があるため、getline関数を使用します。
#include <iostream>
#include <string>
using namespace std;
int main() {
string a, b;
getline(cin, a);
getline(cin, b);
cout << a + b;
return 0;
}
最小差分値
整数配列内の隣接要素間の最小差 ...
6月4日 19:44 投稿
深さ優先探索(DFS)の実装と応用
基本原理:
深さ優先探索は、開始ノードから出発し、一つの分岐を深く進み続けます。葉ノードまたは進めなくなったノードに到達するまで探索を続けます。
探索が葉ノードまたは進めなくなったノードに到達した場合、未探索の前のノードに戻り、他の分岐の探索を続けます。
既に訪問したノードをマークすることで、同じ経路での重複訪問を避けます。
DFSアルゴリズムのス ...
5月31日 11:33 投稿
配列操作と木構造上の色付け問題の解法
配列内要素の隣接関係判定
与えられた配列において、特定の2つの要素xとyが隣接しているかどうかを判定する問題です。
#include<iostream>
#include<vector>
using namespace std;
bool checkAdjacent(vector<int>& arr, int target1, int target2) {
int n = arr.size();
for(int i = 0; i < n; i++) {
if(arr[i] == target1) {
...
5月26日 06:39 投稿