Cod sursa(job #647192)

Utilizator rendorzegAndrei Pavel rendorzeg Data 11 decembrie 2011 12:48:24
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<cstring>
using namespace std;
string s;
int sol,nr,n,v[11],a[11],m[11][11];
ifstream f("copii.in");
ofstream g("copii.out");
int verifica(){
   int j,k,i,ok;
   ok=1;
   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;
    nr=0;
    getline(f,s);
    for(i=1;i<=n;i++)
    {
        getline(f,s);
        for(j=0;j<=n-1;j++)
        m[i][j+1]=s[j]-48;
    }
    back(1);
    g<<sol-1;
    return 0;
}