织梦网站调整,品牌建设情况汇报,espcms易思企业网站管理系统,哪里有做装修网站题意#xff1a; 每一次碰到障碍则在障碍的旁边停下来#xff0c;并且障碍被击碎。此时可以重新值掷一次冰球。当掷球次数超过 10 次则输出 -1。 思路#xff1a; 1. 超过 10 次输出 -1 这个剪枝很关键#xff1b; 2. 主要是要注意些边界条件#xff0c;初始化的情况… 题意 每一次碰到障碍则在障碍的旁边停下来并且障碍被击碎。此时可以重新值掷一次冰球。当掷球次数超过 10 次则输出 -1。 思路 1. 超过 10 次输出 -1 这个剪枝很关键 2. 主要是要注意些边界条件初始化的情况代码最终跑了 250ms比较差就不多说了。 #include iostream
#include algorithm
using namespace std;const int INFS 0x3fffffff;
int grid[25][25], row, col, ans;
int dir[4][2] {-1, 0, 1, 0, 0, -1, 0, 1};inline bool judge(int x, int y) {if (0 x x row 0 y y col) {return true;}return false;
}void dfs(int x, int y, int step) {if (step 10)return ;for (int i 0; i 4; i) {int a x, b y, cflag 0;while (judge(a, b)) {a dir[i][0];b dir[i][1];cflag 1;if (grid[a][b] 3) {ans min(ans, step 1);return ;}if (grid[a][b] 1) break ;}if (grid[a][b] 1 cflag 1) {grid[a][b] 0;dfs(a-dir[i][0], b-dir[i][1], step1);grid[a][b] 1;}}
}int main() {while (scanf(%d%d, col, row) col row) {int x, y;memset(grid, 0, sizeof(grid));for (int i 1; i row; i) {for (int j 1; j col; j) {scanf(%d, grid[i][j]);if (grid[i][j] 2) x i, y j;}}ans INFS;dfs(x, y, 0);if (ans 10)printf(%d\n, ans);elseprintf(-1\n);}
} 转载于:https://www.cnblogs.com/kedebug/archive/2013/03/18/2966997.html