swiftでの安定マッチング問題のコードについて
swiftにてM人の男性と、W人の女性のマッチング問題を扱っています。
気に入った異性3人を選んだ場合の安定マッチングを行いたいです。
下記のサイトを参考にM人✕W人に置き換えて下段記載のコードを書いてみましたが、マッチング結果が全ての女y(yは1〜W)✕男0となってしまい、正しい結果が出力されません。
配列のどこかで間違っているのか、ループが根本的に違うのか、原因不明です。
(参考サイト)http://www.cloudsquare.jp/kumonosu/program/swift/post-281/
manresultParticipantArray、womanresultParticipantArrayの中には、participantIDとして固有のID、numberとして何人目か、firstSelectとして異性の第一希望のID(secondSelectは第2希望、thirdSelectは第三希望)が入っています。
何卒よろしくお願いいたします。
swift
1 2 func marriage() { 3 var M = Int() 4 var W = Int() 5 6// 男の人数 7 M = manresultParticipantArray.count 8// 女の人数 9 W = womanresultParticipantArray.count 10 11 var boy = [Int](repeating: 0, count: M + 1) 12 var position = [Int](repeating: 0, count: W + 1) 13 var rank = Array<[Int]>(repeating: [Int](repeating: 0, count: W + 1), count: M + 1) 14 var girl = Array<[Int]>(repeating: [Int](repeating: 0, count: M + 1), count: W + 1) 15 16 for g in 1...W { 17 18 for b in 1...M{ 19 if manresultParticipantArray[b-1].participantID == womanresultParticipantArray[g-1].firstSelect{ 20 rank[g][b] = 1 21 22 } 23 if manresultParticipantArray[b-1].participantID == womanresultParticipantArray[g-1].secondSelect{ 24 rank[g][b] = 2 25 26 } 27 if manresultParticipantArray[b-1].participantID == womanresultParticipantArray[g-1].thirdSelect{ 28 rank[g][b] = 3 29 30 } 31 } 32 33 boy[g] = 0 34 rank[g][0] = 0 35 } 36 for b in 1...M { 37 for g in 1...W{ 38 39 40 if manresultParticipantArray[b-1].firstSelect == 41 womanresultParticipantArray[g-1].participantID{ 42 girl[b][1] = manresultParticipantArray[b-1].number 43 44 } 45 46 if manresultParticipantArray[b-1].secondSelect == womanresultParticipantArray[g-1].participantID{ 47 girl[b][2] = manresultParticipantArray[b-1].number 48 49 } 50 51 if manresultParticipantArray[b-1].thirdSelect == womanresultParticipantArray[g-1].participantID{ 52 girl[b][3] = manresultParticipantArray[b-1].number 53 54 } 55 } 56 position[b] = 0 57 } 58 for b in 1...M { 59 var s = b 60 while s != 0 { 61 position[s] = position[s] + 1 62 if position[s] == M + 1{ 63 break 64 } 65 let g = girl[s][position[s]] 66 print("g") 67 print(g) 68 69 if rank[g][s] < rank[g][boy[g]] { 70 let t = boy[g] 71 boy[g] = s 72 s = t 73 } 74 } 75 } 76 for g in 1...W { 77 print("女 (g) - 男 (boy[g])") 78 } 79 }
回答1件
あなたの回答
tips
プレビュー