Java 代码:
import java.util.Scanner;
public class Main {
static int sum=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n= sc.nextInt();
int arr[]=new int[n];
for (int i=0;i<n;i++){
arr[i]=i+1;
}
int arr1[][]=new int[n][2];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2; j++) {
arr1[i][j]=sc.nextInt();
}
}
quanpailie(arr,0,arr1);
System.out.println(sum);
}
public static void quanpailie(int arr[],int t,int arr1[][]){
//先固定前面t,给后面全排列,每次结束都要保证顺序不变
int n=arr.length;
//结束条件
if(t==n){
int flag=0;
for (int i=0;i<n;i++){
if(arr1[i][0]!=arr[i]&&arr1[i][1]!=arr[i]){
flag=1;
}
}
if(flag!=1) {
sum++;
}
}
//递归
//让每个元素当一次排头
else for (int i=t;i<n;i++){
int temp;
temp=arr[i];
arr[i]=arr[t];
arr[t]=temp;
if(arr1[t][0]==arr[t]||arr1[t][1]==arr[t])
quanpailie(arr,t+1,arr1);
temp=arr[i];
arr[i]=arr[t];
arr[t]=temp;
}
}
}