□投稿者/ 通りすがり -(2010/09/16(Thu) 10:10:06)
| なんか面白そうなことやってるじゃん って、この問題を解く(数学的に解く)のはPCの能力では無理でないのかな
通りすがりで戯言を書いてみる 結局、マス目を一つずつ埋めていく方法に行きつくような 条件を満たす解は相当多数ある筈だけど、そのうちの一つを求めてシャッフル
10人x31日なら310マスを埋めていく 1.まず、希望が出てるマス目(Aさんは15日に休日希望、Cさんは7日にb希望 等々)を埋める 2.残りのマス目の1つ目を埋める、aを入れて条件満たさなかったら、bを入れる、まだ条件満たさなかったらcを入れる、まだなら休を入れる 3.同様に、残りのマス目の2つ目を埋める、a入れて条件満たさなかったら、bを入れる、まだならcを、まだなら休を入れる 4、同様に全部埋める(1の希望が悪くて全部埋まらないケースは自明で大抵事前に解るとおもうが、全部埋まらなかったら希望を削ってやり直し) ★完成(左上の方にaが、右下の方に休が偏る) 5、1の希望に含まれない縦列(1日〜31日の希望が出てない日)をシャッフルして日にちを入れ替える 6、休日条件の同一な人を同一グループとして、同一グループ内で希望を出さなかった人(横列)をシャッフルして人を入れ替える ★★かなーりバラけて完成 7、気が向けば、もう一度縦列をシャッフル
飽きたら、a,b,c,休 の優先順位で埋めていくのを別の順番に変えてみたりすると、また変わった解が出現するかも 実際には表で処理して出力を転置集計
|
|