题目大意:
给一个n x n 的矩阵,求从1,1到n,n有多少中不同的点权和。每次只能向下或右走一步
思路:
dfs的板子题
代码实现
#include "iostream"
#include "map"
using namespace std;
int a[20][20], b[20][20];
map<int, bool> num;
int n;
int sum = 0;
pair<int, int> q[50 * 50], dir[2] = {{1, 0}, {0, 1} };
void dfs(int i, int j){
if(i == n){
if(j == n){
num[sum] = 1;
return;
}
}
for(int k = 0; k < 2; k ++){
int x = i + dir[k].first, y = j + dir[k].second;
if(i <= n && j <= n && b[x][y] == 0){
b[x][y] = 1;
sum += a[x][y];
dfs(x, y);
sum -= a[x][y];
b[x][y] = 0;
}
}
}
int main(){
cin >> n;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n; j ++){
cin >> a[i][j];
}
}
dfs(1, 1);
cout << num.size() << endl;
return 0;
}