n * m的棋盘,从左上角走到右下角,每次只能往下或者往右走到相邻格子,有多少条路径上的数字是各不相同的?
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, s, a[15][15];
map <int, int> f;
void dfs(int x, int y){
if(f[a[x][y]]) return;//不能出现重复数字
if(x==n && y==m) s++;//路径数量加1
f[a[x][y]] = 1;
dfs(x+1, y);//往下
dfs(x, y+1);//往右
f[a[x][y]] = 0;
}
int main(){
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
scanf("%d", &a[i][j]);
}
}
dfs(f[0]=1, 1);//爆搜
printf("%d\n", s);
return 0;
}