これは NP 困難な問題であるため、一般的な解は見つかりません。実際、1 つのテーブルに一緒に座れる z 人のゲストを見つけることさえ NP 困難です。
ただし、ゲストの競合があまりない場合は、おそらくヒューリスティックが機能します。例えば:
Pick an unseated guest G with a maximal number of incident edges (conflicts)
If G has a conflict with someone seated at each table, then fail
Else assign G at random to an available table
Repeat until all guests are seated
わずかに優れたヒューリスティックには、各ゲストの可能なすべてのテーブルを追跡することが含まれます。最初は、各ゲストはどのテーブルにも座ることができます。
Pick an unseated guest G such that the size of G.availableTables is minimal
If G.availableTables is empty, then fail
Assign G at random to a table T from G.availableTables
For each guest G2 who is in conflict with G
remove T from the set G2.availableTables
Repeat until all guests are seated.
このヒューリスティックを変更して、テーブル T ごとに、残りの席を埋めることができる未着席のゲストの数を追跡して、さらに強力にすることもできます。そして、ゲストをテーブルに割り当てるとき、無作為に選ぶのではなく、残席が多く、座ることができる人が少ないテーブルを優先的に選択します。
実際には、このようなヒューリスティックが無作為に数百回試行してもうまくいかない場合、おそらく解決が難しい問題になるでしょう。