安定な結婚の問題 stable marriage problem

改訂新版 C言語による標準アルゴリズム事典をSwiftでコーディング。

安定な結婚の問題 stable marriage problem
実行:Command Line

import Foundation

/// 入力
/// - parameter メッセージ
/// - returns 入力文字列
func input(msg:String = "") -> String {
    print(msg, separator: "", terminator: "")
    let indata = FileHandle.standardInput;
    let rawdata = indata.availableData;
    let str = NSString(data: rawdata, encoding: String.Encoding.utf8.rawValue);
    let length = str?.length
    let result = str?.substring(with: NSRange(location: 0,length: length! - 1))
    return result!
}

func marriage() {
    let N = 3
    var boy = [Int](repeating: 0, count: N + 1)
    var position = [Int](repeating: 0, count: N + 1)
    var rank = Array<[Int]>(repeating: [Int](repeating: 0, count: N + 1), count: N + 1)
    var girl = Array<[Int]>(repeating: [Int](repeating: 0, count: N + 1), count: N + 1)
    
    for g in 1...N {
        print("女性\(g)好み入力")
        for r in 1...N {
            let b = Int(input(msg: "\(r)位入力:"))!
            rank[g][b] = r
        }
        boy[g] = 0
        rank[g][0] = N + 1
    }
    for b in 1...N {
        print("男性\(b)好み入力")
        for r in 1...N {
            girl[b][r] = Int(input(msg: "\(r)位入力:"))!
        }
        position[b] = 0
    }
    for b in 1...N {
        var s = b
        while s != 0 {
            position[s] = position[s] + 1
            let g = girl[s][position[s]]
            if rank[g][s] < rank[g][boy[g]] {
                let t = boy[g]
                boy[g] = s
                s = t
            }
        }
    }
    for g in 1...N {
        print("女 \(g) - 男 \(boy[g])")
    }
}

marriage()


[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です