原题链接:蓝桥杯2013年第四届真题-剪格子
解题思路:典型深搜
注意事项:
注意先输入列再输入行
参考代码:
#include<iostream> #include<cstring> using namespace std; struct Node { int status = 0; int value = 0; }visit[10][10]; int dfs(int, int, int, int); int count = 0; int counter = 0; int num[50]; int r, c; int min1 = 10000; int deep; int main() { cin >> c >> r; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { cin >> visit[i][j].value; counter += visit[i][j].value; } } dfs(0, 0, 0, 1); if (min1 == 10000) { cout << 0; return 0; } cout << min1; return 0; } int dfs(int x, int y, int count, int deep) { if (visit[x][y].status == 1) { return 0; } visit[x][y].status = 1; count += visit[x][y].value; if (count == counter/2) { if (deep < min1) { min1 = deep; } return 1; } for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { if (i == x + 1 && j == y&&visit[i][j].status == 0 && visit[i][j].value + count <= counter) { dfs(i, j, count, deep + 1); } if (i == x && (j == y + 1 || j == y - 1) && visit[i][j].status == 0 && visit[i][j].value + count <= counter) { dfs(i, j, count, deep + 1); } if (i == x - 1 && j == y&&visit[i][j].status == 0 && visit[i][j].value + count <= counter) { dfs(i, j, count, deep + 1); } } } visit[x][y].status = 0; count -= visit[x][y].value; return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复