Cod sursa(job #713361)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 14 martie 2012 16:05:18
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<iostream>
#include<fstream>
using namespace std;
char c[11][11];
int st[11],nc,d[11][11],n;
long long s;
void verificare()
{
	int i,j,x;
	for(i=0;i<=n;i++) 
		for(j=0;j<=n;j++)
			d[i][j]=0;
	for(i=1;i<=n;i++) 
		for(j=0;j<=n-1;j++)
			if(c[i][j]=='1')
				d[st[i]][st[j+1]]=1;
	x=1;
	for(i=1;i<=nc;i++) {
		for(j=1;j<=nc;j++)
			if((d[i][j]==0)&&(j!=i)) {
				x=0;
				break;
			}
		if(x==0)
			break;
	}
	if(x==1)
		s++;
}
inline void bktr(int p)
{
	int pval;
	if((p-1)==n) {
		if(nc>=2)
			verificare();
	}
	else {
		for(pval=1;pval<=nc;pval++) {
			st[p]=pval;
			bktr(p+1);
		}
		nc++;
		st[p]=nc;
		bktr(p+1);
		nc--;
	}
}
int main ()
{
	int i;
	ifstream f("copii.in");
	ofstream g("copii.out");
	f>>n;
	for(i=1;i<=n;i++)
		f>>c[i];
	f.close();
	bktr(1);
	g<<s;
	g.close();
	return 0;
}