比赛 20100420 评测结果 AAAATTA
题目名称 圆桌会议B 最终得分 71
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-04-20 11:22:19
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>

using namespace std;

int f[41][41];int C,n;

void init()
{
	for (int i=0;i<n;i++)
	for (int j=0;j<n;j++)
	{
		scanf("%d",&f[i][j]);
	}
	for (int i=0;i<n;i++)
	for (int j=0;j<n;j++)
	{
		if (f[i][j]) f[j][i]=1;
	}
}

int s[41],num;
int ans[100000][41];
bool y[41];

void dfs(int u)
{
	if (u<n-1)
	{
		for (int i=1;i<n;i++)
		{
			if (!f[i][s[u-1]] && !y[i])
			{
				s[u]=i;
				y[i]=true;
				dfs(u+1);
				y[i]=false;
			}
		}
	}
	else
	{
		for (int i=1;i<n;i++)
		{
			if (!f[i][s[u-1]] && !f[0][i] && !y[i] && i>s[1])
			{
				s[u]=i;
				num++;
				if (num<100000)
				for (int j=1;j<=n;j++)
				ans[num][j]=s[j-1]+1;
			}
		}
	}
}

void dfss(int u)
{
	if (u<n-1)
	{
		for (int i=1;i<n;i++)
		{
			if (!f[i][s[u-1]] && !y[i])
			{
				s[u]=i;
				y[i]=true;
				dfss(u+1);
				y[i]=false;
			}
		}
	}
	else
	{
		for (int i=1;i<n;i++)
		{
			if (!f[i][s[u-1]] && !f[0][i] && !y[i] && i>s[1])
			{
				s[u]=i;
				for (int j=1;j<n;j++)
				printf("%d ",s[j-1]+1);
				printf("%d\n",s[n-1]+1);
			}
		}
	}
}


void solve()
{
	memset(s,0,sizeof(s));
	memset(y,0,sizeof(y));
	num=0;
	s[0]=0;y[0]=true;
	dfs(1);
	printf("%d %d\n",C,num);
	if (num<100000)
	for (int i=1;i<=num;i++)
	{
		for (int j=1;j<n;j++)
		{
			printf("%d ",ans[i][j]);
		}
		printf("%d\n",ans[i][n]);
	}
	else
	{
		dfss(1);
	}
}

int main()
{
	freopen("dislike.in","r",stdin);
	freopen("dislike.out","w",stdout);
	do
	{
		scanf("%d%d",&C,&n);
		if (C==0) break;
		init();
		solve();
	}while (C!=0);
	return 0;
}