洛谷p1219八皇后問題 dfs+回溯
阿新 • • 發佈:2018-12-15
洛谷p1219八皇后問題 題目連結 程式碼如下
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int h[100],l[100],c[100],d[100];//分別代表行列左下到右上,左下到右上 int sum,n;//sum int print() { if(sum<=2) { for(int m=1;m<=n;m++) printf("%d ",h[m]); printf("\n"); } sum++; } void dfs(int i)//包括搜尋和回溯 { if(i>n) { print(); return ; } else for(int j=1;j<=n;j++) { if((!l[j])&&(!c[i+j])&&(!d[i-j+n])) //i-j+n的原因是防止出現負值 //相當每個孤立的點都是四個身份 { h[i]=j;//宣佈佔領 l[j]=1; c[i+j]=1; d[i-j+n]=1; //接下來就該繼續往下走了,找下一個皇后 dfs(i+1); //回溯 l[j]=0; c[i+j]=0; d[i-j+n]=0; } } } int main() { scanf("%d",&n); dfs(1);//從第一個開始 printf("%d",sum); return 0; }