Cod sursa(job #713325)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 14 martie 2012 15:41:13
Problema Copii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<iostream>
#include<fstream>
using namespace std;
char c[11][11];
int st[11],nc,d[11][11],cls[11],n;
long long s;
void verificare()
{
	int i,j,x;
	for(i=1;i<=n;i++)
		for(j=0;j<=n;j++)
			d[i][j]=0;
	for(i=1;i<=n;i++)
		cls[i]=0;
	for(i=1;i<=n;i++) 
		for(j=0;j<=n-1;j++)
			if(c[i][j]=='1')
				d[st[i]][j+1]=1;
	x=1;
	for(i=1;i<=nc;i++) {
		for(j=1;j<=n;j++)
			if(d[i][j]==1)
				cls[st[j]]=1;
		for(j=1;j<=nc;j++)
			if((cls[j]==0)&&(j!=i)) {
				x=0;
				break;
			}
	}
	if(x==1)
		s++;
}
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;
}