質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

433閲覧

Swiftでの安定マッチング、安定結婚問題のコードについて

kenben

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/29 09:55

編集2020/05/29 16:00

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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakasho_dev

2020/05/29 13:36

質問するときのヒント( https://teratail.com/help/question-tips )を参考に問題としていることが伝わる内容に変えましょう。特にコードはブロックとして囲むのは忘れないようにしましょう。 『どうにもうまくいきません』というのはどういう状態なのでしょうか。 参考にしたサイトのコードと全く同じものが動かないのか、アレンジしたものが動かないのかどちらでしょう?参考にしたサイトのどこまで理解して、何が分からないのかも書いた方が良いと考えます。
guest

回答1

0

自己解決

解決しました。ありがとうございました。

投稿2020/06/20 02:39

kenben

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問