查看: 160|回复: 4

[JavaSE] POJ 1979 Red and Black 解题报告

[复制链接]
  • TA的每日心情
    开心
    2015-3-20 14:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2017-12-19 20:59:48 | 显示全部楼层 |阅读模式
    《程序设计导引及在线实践》上面有这道题,练习了递归的思想。


    Cpp代码

    • #include <stdio.h>  
    •   
    • const int MAX_BRICK_SIZE = 20;  
    •   
    • /*用来存储方块符号信息*/  
    • char bricks[MAX_BRICK_SIZE + 1][MAX_BRICK_SIZE + 1];  
    • int W, H;  
    •   
    • /*递归调用的函数。
    • *假设以(i, j)为起点,则总的可以经过的黑瓷砖数为:
    • * 1 + countBricks(i-1,j) + countBricks(i+1,j)
    • *          + countBricks(i,j-1) + countBricks(i,j+1)
    • * (上下左右各算一次)
    • */  
    • int countBricks(int i, int j) {  
    •     /*注意,i与行数H比较,j与列数W比较*/  
    •     if(i < 0 || i >= H || j < 0 || j >= W)  
    •         return 0;  
    •     if(bricks[j] == '#')  
    •         return 0;  
    •   
    •     /*别忘了置当前位置为'#',表示已经经过了*/  
    •     bricks[j] = '#';  
    •     return 1 + countBricks(i-1,j) + countBricks(i+1,j)  
    •             + countBricks(i,j-1) + countBricks(i,j+1);  
    • }  
    •   
    • int main()  
    • {  
    •     while(scanf("%d%d", &W, &H), !(W == 0 && H == 0)) {  
    •         for(int i = 0; i < H; ++i)  
    •         scanf("%s", bricks);  
    •   
    •         for(int i = 0; i < H; ++i)  
    •             for(int j = 0; j < W; ++j)  
    •                 if(bricks[j] == '@')  
    •                     printf("%d/n", countBricks(i, j));  
    •     }  
    •   
    •     return 0;  
    • }  



    您需要登录后才可以回帖 登录 | 注册青鸟豆号

    本版积分规则

    Copyright 1999-2018 Beijing Aptech Beida Jade Bird Information Technology Co.,Ltd

    北大青鸟IT教育 北京阿博泰克北大青鸟信息技术有限公司 版权所有

    京ICP备11045574号-3 京公网安备11010802013845号

    快速回复 返回顶部 返回列表