用的二分法暴力求解,不知道行不行,这是C++代码 #include"pch.h" #include"stdio.h" #include <iostream> using namespace std; int h = 0,q=0; int ss[100][100]; int a[100], b[100]; void backtrack(int t) { int m=0, n=0,i=0,j=0; if (t >= q) { h++; return; } else { i = a[t]; j = b[t]; backtrack(t + 1); if (ss[i - 1][j] != -1 && ss[i][j - 1] != -1) { ss[i][j] = -1; backtrack(t + 1); ss[i][j] = 0; } else return; } } int main(){ int aa, bb,i,j;   cin >> aa >> bb; for(i=0;i<aa;i++) for (j = 0; j < bb; j++) { cin >> ss[i][j]; } for (i = 0; i < aa; i++) { for (j = 0; j < bb; j++) { if (ss[i][j] == 0) { a[q] = i; b[q] = j; q++; } } } backtrack(0); cout << h; return 0; }