Informatika gyűjtemény

Egy szinttel feljebb varos.cpp

2004050607080910

NézetNyomtat

varos.cpp (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: utf-8
Méret: 1 KB
/*
    Informatika: algoritmus szakkör
    11. óra
    2. feladat
    http://prog.berzsenyi.hu:8080/prog/View/szakkor/bdg/0809/11ora/varos
    Uray M. János, 2008. december 2.
*/ 
#include <stdio.h>
#define MaxN 1000
#define MaxM 10000

// T: háromszögek (megyék) adatai
// S: Segédtömb a FindNeighbours()-höz, mely garantálja, hogy egy szomszédot
// csak egyszer találjunk meg
int T[MaxM][3], S[MaxN], N, M;

int Read (char *);
int Write (char *);
int FindTriangles (int);
int FindNeighbours (int);

int main (int AN, char * Args []) {
    if (AN < 3)
        return 1;
    if (!Read(Args[1]))
        return 1;
    if (!Write(Args[2]))
        return 1;
    return 0;
}

// Fájl olvasása
int Read (char * FN) {
    FILE * F = fopen(FN, "rt");
    int I, J;
    
    if (== NULL)
        return 0;
    fscanf(F, "%d %d\n", &N, &M);
    for (= 0; I < M; I++)
        for (= 0; J < 3; J++) {
            fscanf(F, "%d ", &T[I][J]);
            T[I][J]--;
        }
    return 1;
}
// Fájl írása
int Write (char * FN) {
    FILE * F = fopen(FN, "wt");
    int I, A[MaxN], M = 0;
    
    if (== NULL)
        return 0;
    for (= 0; I < N; I++) {
        A[I] = FindNeighbours(I);
        if (FindTriangles(I) != A[I])
            M++;
    }
    fprintf(F, "%d\n", M);
    for (= 0; I < N; I++)
        fprintf(F, "%d ", A[I]);
    fprintf(F, "\n");
    fclose(F);
    return 1;
}

// Visszaadja azt, hogy az X. város hány háromszögben (megyében) van benne
int FindTriangles (int X) {
    int I, J, Q = 0;
    
    for (= 0; I < M; I++)
        for (= 0; J < 3; J++)
            if (T[I][J] == X)
                Q++;
    return Q;
}
// Visszaadja az X. város szomszédainak számát
int FindNeighbours (int X) {
    int I, J, K, Q = 0;
    
    for (= 0; I < N; I++)
        S[I] = 0;
    for (= 0; I < M; I++)
        for (= 0; J < 3; J++)
            if (T[I][J] == X)
                for (= 0; K < 3; K++)
                    if (!= K && !S[T[I][K]]) {
                        S[T[I][K]] = 1;
                        Q++;
                    }
    return Q;
}
(Vissza)