Cod sursa(job #646987)

Utilizator rendorzegAndrei Pavel rendorzeg Data 11 decembrie 2011 12:18:48
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#include<cstring>
using namespace std;
string s;
int sol,nr,a[11],m[11][11],v[11],n;
ifstream f("copii.in");
ofstream g("copii.out");
int verifica(){
	int i,j,ok=1,k;
	for (i=1;i<=nr;i++){
		ok=1;
		memset(v,0,sizeof(v));
		for (j=1;j<=n;j++)
			if(a[j]==i) 
				for (k=1;k<=n;k++)
					if (m[j][k]==1) v[a[k]]=1;
		for (j=1;j<=nr; j++)
			if ((j!=i) && (v[j]==0)){
				ok=0;
				break;
			}
		if(ok==0) break;
	}
	return ok;
}
void back(int l){
	int i,k;
	if (l==n+1) sol+=verifica();
	else{
		k=nr+1;;
		for (i=1;i<=k;i++){
			a[l]=i;
			if (i==k)
				nr++;
			back(l+1);
			if (i==k) 
				nr--;
		}
	}
}
int main(){
	int i,j;
	f>>n;
	getline(f,s);
	nr=0;
	for (i=1;i<=n;i++)
	{
		getline(f,s);
		for (j=0;j<n;j++)
			m[i][j+1]=s[i]-48;
	}
	back(1);
	g<<sol;
	return 0;
}