heabiの日記

セキュリティを学びたいです。

最短路問題を解く計算機を作った

1. 計算機を見る

https://heabiside.github.io/calculators/

ここから計算機を使うことができます。JSはその場しのぎ的に書いたのでコードはきれいじゃないです。

 

2. これはなに

ダイクストラ法とベルマンフォード法で最短路問題を解きます。

下の写真はベルマンフォード法で次のグラフの最短路問題(sスタート)を解いたときの見た目です。ループごとに最短路が更新される様子を表に出力しています。

 

f:id:heabi:20211229124312p:plain

このグラフに対する最短路問題を解くと下の写真のようになる

 

 

 

 

f:id:heabi:20211229124423p:plain

上のグラフに対する出力

 

3. 実装方針

簡単に書きます。実装で使ったアルゴリズムの大まかなコードは1のところのリンクにアクセスすれば見れます。

ベルマンフォードに関して言えば、JSでベルマンフォードを計算して、各ループごとにhtmlとして表にして出力しているだけです。

ダイクストラ法も似たような感じで実装しています。

ちなみにこの計算機のところのグラフはdotを使って作成しています。(テキストを書くだけでグラフを自動出力してくれて便利です。)

 

以上です。ここまで読んでいただきありがとうございます。

 

SQLのクエリをまとめて実行して表を出力するPHPコードを作成した。

 

1. 対象者

xamppとかを導入済の人(MySQLとかApacheとか導入してあって、PHP使える方)

私は大学のデータベースの課題を簡単にできるフォーマットが欲しかったので作りました。

 

2. 完成したもの

f:id:heabi:20211123161301p:plain

クエリとかを入力する画面

上の写真はクエリとか操作対象のデータベース名を入力する画面です。SQLのコードをそのままコピペすれば概ね動くと思います。(ただ、意地悪なSQL文とかを入れるとちゃんと動かないかもしれないです。)

一応XSS対策はしたつもりです。(SQL injection的なことはやりたい放題ですが、ローカルで動かすだけの課題用なので許して下さい。)

 

f:id:heabi:20211123161751p:plain

表がそれなりにきれいに出力される。

 

クエリを実行するとSELECTの部分が自動的に連番で表になって出力されます。コメントは取り除かれます。(コメントを残したければ自分でコードをいじって下さい。)

あと、PHP内でデータベースにアクセスするときのパスワードとかの設定はいじる必要があるかもしれないです。(多分、初期設定のままなら動きます。)

 

3. ソースコードをダウンロード

github.com