NYOJ 499 迷宫
2013-12-08 06:27
190 查看
NYOJ 499 迷宫 链接
这道题是一个深搜思想, 开始自己在自己想用广搜 可能不能用广搜吧吧, 反正我是没弄出来!其实深搜自己想了不过没想出来杂用·····看了别人的函数恍然醒悟 下面 说下这个深搜咋回事
1:写深搜函数时我是难在不知道咋写, 看见别人代码 恍然知道, 对啊 四个方向都要搜索的的 函数内要分 上下左右 四次调用自身的
2:写出递归 时有一个地方,就是四个递归后面的清零 , 自己怎么也不知道该放哪了,最后还是看了启蒙我得那个 代码跟踪下明白咋回事了, 因为在递归调用前为了表示已经 访问过, 赋值为一了, 在返回上级时则要清零 其实很直白, 你要在四个方向全都访问过 才能把它清零, 这样想 你的清零就有点理所当然的放在四个递归之后 知道后感觉理所当然 而自己考虑时因为掌握不太熟 就有点无从下手的感觉!
#include<stdio.h> #include<string.h> int a[10][10], count, n, m; int b[10][10]; void DFS(int x, int y) { if(x > n || x < 1 || y > m || y < 1 || a[x][y] == 1) { return ; } if(x == n && y == m) { count++; return ; } a[x][y] = 1;//赋值为一 DFS(x + 1, y); DFS(x - 1, y); DFS(x, y + 1); DFS(x, y - 1); a[x][y] = 0;//我靠 想到要清零了 不过不知道把这个语句放哪 我去 } int main() { int t, i, j; scanf("%d", &t); while(t--) { count = 0; memset(b, 0, sizeof(b)); scanf("%d%d", &n, &m); for(i = 1; i <= n; i++) { for(j = 1; j <= m; j++) { scanf("%d", &a[i][j]); } } DFS(1, 1); printf("%d\n", count); } return 0; }点击打开链接
相关文章推荐
- nyoj499 迷宫
- NYOJ499迷宫
- nyoj499 + 迷宫 + dfs
- NYOJ 499 迷宫
- NYOJ 499.迷宫(深搜)
- nyoj-499-迷宫
- NYOJ 499迷宫(简单dfs)
- NYOJ-499-迷宫
- nyoj 499 迷宫(dfs)
- NYOJ 499 迷宫
- NYOJ499 迷宫 DFS
- 迷宫 nyoj 499
- nyoj 499迷宫【DFS】
- NYOJ 499 迷宫(DFS)
- NYOJ 499迷宫(DFS)
- ACM--DFS--nyoj 499--迷宫
- NYOJ-499-迷宫
- NYOJ 82 - 迷宫寻宝(一)
- nyoj——58 最小步数(DFS,BFS 迷宫问题)
- NYOJ 82 迷宫寻宝(一)