Informatika gyűjtemény

Egy szinttel feljebb vidampark.cpp

2004050607080910

NézetNyomtat

vidampark.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
    12. óra
    2. feladat
    http://prog.berzsenyi.hu:8080/prog/View/szakkor/bdg/0809/12ora/vidampark
    Uray M. János, 2008. december 9.
*/
#include <stdio.h>
#include "matrix.h"

cMatrix Graph;
int N, K;

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

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;
}
int Read (char * FN) {
    FILE * F = fopen(FN, "rt");
    int M, U, V;
    
    if (== NULL)
        return 0;
    fscanf(F, "%d %d %d\n", &N, &M, &K);
    Graph.Set(N, N);
    Graph.Empty();
    // Élmátrix kitöltése
    for (int I = 0; I < M; I++) {
        fscanf(F, "%d %d\n", &U, &V);
        // C-típusú indexelés
        Graph.SetItem(- 1, V - 1, 1);
    }
    fclose(F);
    return 1;
}
int Write (char * FN) {
    FILE * F = fopen(FN, "wt");
    int * A = new int [K], X = 1, I, J;
    
    if (== NULL)
        return 0;
    A[0] = 0;
    A[1] = -1;
    while (X) {
        for (= A[X] + 1; I < N; I++)
            if (Graph.GetItem(A[- 1], I)) {
                A[X++] = I;
                A[X] = -1;
                break;
            }
        if (== N)
            X--;
        if (== K) {
            if (A[- 1] == N - 1)
                break;
            X--;
        }
    }
    if (!X)
        fprintf(F, "0");
    else
        for (= 0; I < K; I++)
            fprintf(F, "%d ", A[I] + 1);
    fclose(F);
    delete [] A;
    return 1;
}
(Vissza)