人员分组
题目:
你的任务是将一定数量的人,分成2组,满足以下规则:
1。每个人都要属于一个组。
2。每个队伍至少要一个队员。
3。(关键)每个队伍的队员必须认识队伍里的其他所有人,也就是2个队伍的成员必须互相认识。
4。2支队伍的大小越接近越好。
输入:
每个人都给编一个号:1-N.
第一行是一个整形变量,表示一共有多少个人(N).下面有n行,每一行罗列出第i个人的所认识的人。每一行以0结束。
输出:
如果没有可能分开,这输出“no solution”到teams.out。不然分两行输出结果。每一行第一个数字表示这一组有多少个人(k),然后依次罗列出他们的代号。
例子:
输入1:
5
3 4 5 0 //表示第一个人所认识的人,也就是说其他人都不能和第一个人在同一组
1 3 5 0 //第二个
2 1 4 5 0 //第三个
2 3 5 0 //第四个
1 2 3 4 0 //第五个
输出1:
No Solution //无法解答
输入2:
5
2 3 5 0
1 4 5 3 0
1 2 5 0
1 2 3 0
4 3 2 1 0
输出2:
3 1 3 5 //第一个3代表有3个人在这一组(1,3,5)
2 2 4 //第一个2代表有2个人在这一组(2,4 )
请大家提出你的算法,尽量详细些。