2021-04-26

POJ1979 Java

做POJ1979 Red and Black(http://poj.org/problem?id=1979),题意如下:
一个大小为WH的矩形房间内,地上铺了红色与黑色两种正方形的瓷砖,瓷砖大小为11,初始时刻,你站在一个黑色瓷砖上,只能向上下左右四个方向相邻的黑色瓷砖移动。给出房间的描述和你的初始位置,用“#”表示红色瓷砖,用“.”表示黑色瓷砖,用字符“@”表示初始时你所在的黑色瓷砖,求出你所能到达的黑色瓷砖块数。 输入:第一行给出两个整数W和H分别表示地面的长度和宽度,接下来有W行,每一行有H列,其中“#”表示红色瓷砖,“.”表示黑色瓷砖块数, “@”表示初始时你所在的黑色瓷砖。最后一行0 0表示输入结束。 输出:一个整数,表示你所能到达的黑色瓷砖块数。 要求使用递归,输入与输出必须严格按照题目给定格式,在线提交,只有提交结果返回Accept才算正确完成。

import java.util.Scanner;



public class Main {

    static char[][] A;



    static int sum;//黑可以路过的数



    static int W;//宽



    static int H;//高



    // dir1 dir2 组成上下左右

    static int[] dir1 = { -1, 0, 0, 1 };



    static int[] dir2 = { 0, -1, 1, 0 };



    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        while (true) {

            H = in.nextInt();

            W = in.nextInt();

            if (H == 0)

                break;

             in.nextLine();

            A = new char[H][W];

            int x = 0, y = 0;

            // for (int i = 0; i < W; i++) {

            // for (int j = 0; j < H; j++) {

            // char c = in.next().charAt(0);

            // if (c == '@') {

            // x = i;

            // y = j;

            // }

            // A[i][j] = c;

            // }

            // }



            // 用循环把字符输入

            for (int i = 0; i < H; i++) {

                String string = in.nextLine();

                if (string.contains("@")) {

                    x = i;

                    while (string.charAt(y) != '@')

                        y++;

                }

                A[i] = string.toCharArray();

            }

            sum = 0;

            

            Sum(x, y);//进入

            System.out.println(sum);



        }



    }



    private static void Sum(int sx, int sy) {

        A[sx][sy] = '#';

        sum++;

        for (int j = 0; j <= 3; j++) {

            //上下左右

            int x = sx + dir1[j];

            int y = sy + dir2[j];

            if (x >= 0 && x < H && y >= 0 && y < W && A[x][y] == '.')

                Sum(x, y);

        }

    }



}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值