基础dfs题目,按照四个方向搜索即可。判断是否遍历过。
#include<stdio.h>
#include<iostream>
using namespace std;
const int MAX_N = 21;
int N;
int A[MAX_N][MAX_N];
int T[MAX_N];
long long ans=0;
int init()
{
int i,j;
scanf("%d",&N);
for (i=1;i<=N;i++)
for (j=1;j<=N;j++)
scanf("%d",&A[i][j]);
}
int dfs(int t)
{
if (t>N) {ans++;return 0;}
int i,j;
for (i=1;i<=4;i++)
{
bool next = true;
for (j=1;j<t;j++)
if (A[j][t]&&T[j]==i) next = false;
if (next)
{
T[t]=i;
dfs(t+1);
}
}
}
int put()
{
cout<<ans;
}
int main()
{
init();
dfs(1);
put();
return 0;
}