Cod sursa(job #509646)

Utilizator titusuTitus C titusu Data 11 decembrie 2010 15:32:24
Problema Copii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <iostream>
using namespace std;

int n,a[101][101],x[101],rez;

void VerifSol(int mx){
	int ok=true, v[101][101];
	for(int i=1;i<=mx;++i)
		for(int j=1;j<=mx;++j)
			v[i][j]=0;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if(a[i][j]==1 && i-j  && x[i]-x[j])
				v[x[i]][x[j]]=1;
	for(int i=1;i<=mx;++i)
		for(int j=1;j<=mx;++j)
			if(i-j && v[i][j]==0)
				ok = false;
	if(ok)
		rez++;
}

void back(int k,int nn){
	for(int i=1;i<=nn;++i){
		x[k]=i;
		int mx = 0;
		for(int j=1;j<=k;++j)
			if(x[j]>mx)
				mx = x[j];
		if(k==n)
			VerifSol(mx);
		else
			back(k+1,mx+1);
	}
}

int main(){
	ifstream fin("copii.in");
	ofstream fout("copii.out");
	fin>>n;
	char s[111];
	fin.getline(s,111);
	for(int i=1;i<=n;++i){
		fin.getline(s,111);
		for(int j=1;j<=n;++j)
			a[i][j]=s[j-1]-'0';
	}
	back(1,1);
	fout<<rez-1<<endl;
	return 0;
}