圆桌会议B

成绩 0 开启时间 2013年02月21日 星期四 23:02
折扣 0.8 折扣时间 2013年02月28日 星期四 23:02
允许迟交 关闭时间 2013年02月28日 星期四 23:02
输入文件 dislike.in 输出文件 dislike.out
【问题描述】
N个政党的领导人参加一次圆桌会议讨论政治问题,但是某些领导人不愿意与其他某些政党的领导人坐在一起。这N个领导人用1,2,…,N来表示。I不愿意与J坐在一起不一定表示J不愿意与I坐在一起,但是在这种情况下,I与J还是不能坐在一起,因为I不喜欢J。
用一个以1开头的1,2,…,N的排列来表示一种安排座位的方案,假定排列的最后一个数字与1是相邻的。排列的方案要以字典顺序输出。而且,顺时针和逆时针的情况被认为是相同的。
写一个程序,输出所有可行的座位安排方案。
输入格式】
输入格式(输入文件名dislike.in)
输入文件包含多组数据。
每组数据的第1行是数据编号C和领导人的数目N(N<=40)。
接下来是一个N行N列的矩阵D,如果I不愿意与J坐在一起,那么矩阵的第,行的第J个数为1,否则为0。同行整数之间用一个空格分隔。
当C=0时输入文件结束。
输出格式】
输出格式(输出文件名dislike.out)
对于输入的每一组数据,首先在一行输出数据编号C和所有可行的安排方案的总数K。
接下来的K行按字典顺序输出每种可行的方案。两组相邻的输出数据间用一个空行分隔
(注:输出数据顺序与输入数据一致即可)
输入输出样例】
输入(dislike.in)
1 5
1 1 0 1 0
0 1 0 0 1
0 0 1 0 0
1 0 0 1 0
0 1 0 1 1
2 6
1 0 1 1 0 0
0 1 0 0 0 1
1 0 1 0 0 0
1 0 0 1 1 0
0 0 1 0 1 1
0 1 0 0 1 1
0
输出(dislike.out)
1 0
2 2
1 5 2 3 4 6
1 5 2 4 3 6