迴圈

輸入地圖

由左而右上而下搜尋領土

利用遞迴求出領土面積,並判別東南西北

輸出

 

#include<cstdio>
#include<iostream>

using namespace std;

char island[512][512];
int west, north, east, south;
int area;
int X, Y;

void setTerr();
void terr(int x, int y);

int main(){

    while(~scanf("%d%d", &X, &Y))
    {
        setTerr();
        for(int tmpY = 0; tmpY<Y; tmpY++)
            for(int tmpX = 0; tmpX<X; tmpX++)
            {
                if(island[tmpY][tmpX] == '0')
                    continue;

                west = north = 256;
                east = south = 0;
                area = 0;

                terr(tmpX, tmpY);
                printf("%d %d %d %d %d\n", west, north, east, south, area);
            }
    }

 

 

    return 0;
}

void setTerr()
{
    for(int j = 0; j<Y; j++)
        for(int i = 0; i<X; i++)
            scanf(" %c", &island[j][i]);
}

void terr(int x, int y)
{

    if(y < 0 || y >= Y || x < 0 || x >= X || island[y][x] == '0') return;

    if(x < west || x > east || y < north || y > south)
    {
        if(x < west)
            west = x;

        if(x > east)
            east = x;

        if(y < north)
            north = y;

        if(y > south)
            south = y;
    }

    area ++;

    island[y][x] = '0';


    terr(x-1, y);
    terr(x+1, y);
    terr(x, y-1);
    terr(x, y+1);

    return;
}
 

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()