JohnyDeath писал(а) 21. Мая 2010 :: 12:50:Тогда в один проход задача не решается, нужен какой-то оптимизирующий алгоритм.
Т.е., к примеру, 1-6, 2-3, 4-5 - допустимое решение, а 1-3, 2-4, ?-? - нет.
Рекомендую
Microsoft Solver Foundation.
Ну или перебор, если данных не слишком много..
Да, просто список доступных пар можно получить так:
declare @люди table (id integer)
insert into @люди values (1)
insert into @люди values (2)
insert into @люди values (3)
insert into @люди values (4)
insert into @люди values (5)
insert into @люди values (6)
declare @турниры table (id integer, чел1 integer, чел2 integer)
insert into @турниры values (1, 1, 2)
insert into @турниры values (1, 3, 4)
insert into @турниры values (1, 5, 6)
insert into @турниры values (2, 1, 4)
insert into @турниры values (2, 2, 5)
insert into @турниры values (2, 3, 6)
select люди1.id чел1, люди2.id чел2
from @люди люди1
inner join @люди люди2 on люди1.id < люди2.id
where not люди2.id in (
select чел2
from @турниры
where чел1 = люди1.id
)