【蓝桥杯】剪格子

来源:互联网 发布:c语言变量 编辑:程序博客网 时间:2024/05/01 03:15


算法思想:简单的DFS回溯,代码注释就不写了


#include<iostream>#include<cstdio>#include<cstring>using namespace std;int map[11][11];int vis[11][11];int m, n;int sum = 0, s;int dir[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};int res = 0;int dfs(int x, int y, int temp) {if(temp == s) {return 1;}int r = 0;for(int i = 0; i < 4; i++) {int row = x + dir[i][0];int col = y + dir[i][1];if(row >= 0 && row < n && col >= 0 && col < m) {if( !vis[row][col] && temp + map[row][col] <= s ) {vis[row][col] = 1;r = dfs(row, col, temp + map[row][col]);if( r ){return r + 1;}vis[row][col] = 0;}}}return 0;}int main(){memset(map, 0, sizeof(map));memset(vis, 0, sizeof(vis));scanf("%d%d", &m, &n);for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) {scanf("%d", &map[i][j]);sum += map[i][j];}}if(sum % 2 == 1) {printf("0");}else {s = sum / 2;if(map[0][0] == s) {printf("1");} else {vis[0][0] = 1;res = dfs(0, 0, map[0][0]);printf("%d", res);}}return 0;} 


0 0