n皇后問題(dfs)


#include<stdio.h>
#include<stdlib.h>
int p[50],a[50],b[50],c[50],ans;
int n;
int asd[53][53];
void dfs(int x){
    int i,j,k;
    if(x==n+1){
      ans++;
      for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
	      asd[i][j]=0;
	  for(i=1;i<=n;i++){
	    asd[i][p[i]]=1;
	  }
	  for(i=1;i<=n;i++)
	    for(j=1;j<=n;j++){
		  printf("%d",asd[i][j]);
		  if(n==j)puts("");
		}
	  puts("");
      return;
    }
    for(i=1;i<=n;i++)
      if(a[i]+b[x+i]+c[x-i+20]==0){
        a[i]=1;b[x+i]=1;c[x-i+20]=1;
        p[x]=i;
        dfs(x+1);
        a[i]=0;b[x+i]=0;c[x-i+20]=0;
      }
}
int main(){
    int i,j,k;
    scanf("%d",&n);
    dfs(1);
    printf("%d
",ans); return 0; }