原題傳送門ios
這道題沒什麼難的,但卡了本蒟蒻半個小時,由於我忘了在搜索完一種方案並使總方案加一後return......血淋淋的教訓啊QAQ,之後確定不會再忘了......spa
#include<iostream> #include<cstdio> #include<string> #include<vector> #include<algorithm> #include<cstdlib> #include<cmath> #include<stack> #include<map> using namespace std; int n,e[9][9],b[9],ans; int r(int no) { int i; for(i=1;i<=n;i++) { if(e[no][i]&&b[i]==b[no]) return 0; } return 1; } void dfs(int no) { if(no==n+1) { ans++; return; } int i; for(i=1;i<=4;i++) { b[no]=i; if(r(no)) dfs(no+1); b[no]=0; } } int main() { int i,j; cin>>n; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>e[i][j]; } } dfs(1); cout<<ans<<endl; return 0; }