All pastes #205232 Raw Edit

Anonymous

public c v1 · immutable
#205232 ·published 2006-10-16 17:28 UTC
rendered paste body
#include <stdio.h>#include <memory.h>#define toggle(n,key)	(key^=(1<<n))#define ison(n,key)	(key&(1<<n))int n;long long memo[2097154];char adj[21][21];long long count_ways(int pos, unsigned long current){	int i;	long long num_ways = 0;	if(pos == n) return 1;	if(memo[current]!=0) {		num_ways=memo[current];	} else {		for(i = 0 ; i < n ; i++) {			if(adj[pos][i]==1) {				if(!ison(i,current)) {					toggle(i,current);					num_ways += count_ways(pos+1, current);					toggle(i,current);				}			}		}		memo[current]=num_ways;	}	return num_ways;}int main(){	int _T;	scanf("%d", &_T);	while(_T--) {		scanf("%d", &n);		int is_adj, i, j;		unsigned long current = 0;		long long num_ways = 0;		memset(adj, 0, sizeof(char)*441);		for(i = 0 ; i < n ; i++) for(j = 0 ; j < n ; j++) {				scanf("%d", &is_adj);				if(is_adj) adj[i][j]=1; 			}		/*Initialize memo table*/		memset(memo, 0, sizeof(memo));		for(i = 0 ; i < n ; i++)			if(adj[0][i]==1) {				toggle(i,current);				num_ways += count_ways(1, current);				toggle(i,current);			}		printf("%lld\n", num_ways);	}	return 0;}