- 496 名前:デフォルトの名無しさん [2017/07/08(土) 09:51:52.03 ID:bx7kaphQ.net]
- 浅野孝夫著『グラフ・ネットワークアルゴリズムの基礎』(近代科学社)の
Ford - Fulkerson のアルゴリズムのプログラムを読んでいます。 ひどいプログラムです。 たとえば、深さ優先探索を行う関数を見てください↓ void dfs(int v, int path[]){// vからの深さ優先探索 ■■■■int afwd, abk, w; ■■■■afwd = edgefirst[v]; ■■■■while (afwd != 0 && rescap[afwd] == 0) afwd = edgenext[afwd]; ■■■■while (t_found == false && afwd != 0) {// 増加パスはまだ発見されいない限り ■■■■■■■■w = head[afwd]; ■■■■■■■■if (path[w] == unvisited) {// wが未訪問であったらwへ前進 ■■■■■■■■■■■■abk = afwd+1; // abkはafwdの逆向きの辺 ■■■■■■■■■■■■if (afwd % 2 ==0) abk = afwd-1; ■■■■■■■■■■■■path[w] = abk; // afwdの逆向きの辺abkをpath[w]に記憶する ■■■■■■■■■■■■if (w != t) dfs(w,path); // wからの深さ優先探索へ進む ■■■■■■■■■■■■else {// w == t なので増加パスPが見つかった ■■■■■■■■■■■■■■■■t_found=true; // dfs(v,path)の強制終了へ ■■■■■■■■■■■■} ■■■■■■■■} ■■■■■■■■if (t_found == false) { // dfs(v,path)が強制終了になっていないときのみ ■■■■■■■■■■■■ afwd = edgenext[afwd]; //次の辺に移る ■■■■■■■■■■■■ while (afwd != 0 && rescap[afwd] == 0) afwd = edgenext[afwd]; ■■■■■■■■} ■■■■} }
|

|