原题传送门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; }