Informatika gyűjtemény

Egy szinttel feljebb mb_regiok.c

2004050607080910

NézetNyomtat

mb_regiok.c (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
#include <stdio.h>

typedef struct {
    int x;
    int y;
    int r;
} varos_t;

varos_t v[100];
int n, t, r;

int beolvas(void)
{
    int i, x, y;

    if (scanf("%d %d", &n, &t) != 2) {
        printf("hibas bemenet\n");
        return 0;
    }

    r = 0;

    for (= 0; i < n; i++) {
        if (scanf("%d %d", &x, &y) != 2) {
            printf("hibas bemenet\n");
            return 0;
        }

        v[i].= x;
        v[i].= y;
        v[i].= -1;
    }

    return 1;
}

int abs(int x)
{
    return (>= 0) ? x : -x;
}

int tavolsag(int a, int b)
{
    return abs(v[a].- v[b].x) + abs(v[a].- v[b].y);
}

void felulir(int regi, int uj)
{
    int i;

    for (= 0; i < n; i++)
        if (v[i].== regi)
            v[i].= uj;
}

void beszor(void)
{
    int i, j;

    for (= 0; i < n; i++) {
        if (v[i].< 0) {
            v[i].= r;
            r++;
        }

        for (= i + 1; j < n; j++) {
            if (tavolsag(i, j) <= t && v[i].!= v[j].r) {
                if (v[j].>= 0)
                    felulir(v[j].r, v[i].r);
                else
                    v[j].= v[i].r;
            }
        }
    }
}

void kiir(void)
{
    int i, j, regio[100], regiok = 0;

    for (= 0; i < n; i++) {
        for (= 0; j < regiok; j++)
            if (regio[j] == v[i].r)
                break;

        if (>= regiok)
            regio[regiok++] = v[i].r;
    }

    printf("%d\n", regiok);

    for (= 0; i < regiok; i++) {
        for (= 0; j < n; j++)
            if (v[j].== regio[i])
                printf("%d ", j + 1);

        printf("\n");
    }
}

int main(void)
{
    if (!beolvas())
        return 1;

    beszor();

    kiir();

    return 0;
}
(Vissza)