1 N=13
2 col=[0]*N
3 d1=[0]*(N*2)
4 d2=[0]*(N*2)
5 ret=0
6 def dfs(x):
7 global ret
8 if x==N:
9 ret+=1
10 else:
11 for i in xrange(N):
12 if col==0 and d1[i+x]==0 and d2[i-x+N]==0:
13 col,d1[i+x],d2[i-x+N]=1,1,1
14 dfs(x+1)
15 col,d1[i+x],d2[i-x+N]=0,0,0
16 dfs(0)
17 print ret
根据python代码,我改编了各个语言的版本:
ruby
1 N=13
2 $col=[0]*N
3 $d1=[0]*(N*2)
4 $d2=[0]*(N*2)
5 $ret=0
6 def dfs(x)
7 if x==N
8 $ret+=1
9 else
10 N.times do |i|
11 if $col==0 and $d1[i+x]==0 and $d2[i-x+N]==0
12 $col=$d1[i+x]=$d2[i-x+N]=1
13 dfs x+1
14 $col=$d1[i+x]=$d2[i-x+N]=0
15 end
16 end
17 end
18 end
19 dfs 0
20 puts $ret
C(C++)
1 #include
2 using namespace std;
3 const int N=13;
4 int col[N],d1[N+N],d2[N+N];
5 int ret=0;
6 void dfs(int x){
7 if (x==N)
8 ret++;
9 else{
10 for (int i=0;i