Informatika gyűjtemény

Egy szinttel feljebb halozat.cpp

2004050607080910

NézetNyomtat

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

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

int N, K;
cMatrix Graph;

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.SetAll(inf);
    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 = 0, I;
    type * D0 = new type [N], * D1 = new type [N];
    
    if (== NULL)
        return 0;
    Dijkstra(Graph, D0, K - 1);
    Graph = Graph.Reverse();
    Dijkstra(Graph, D1, K - 1);
    for (= 0; I < N; I++)
        if (D0[I] != inf && D1[I] == inf)
            A++;
    fprintf(F, "%d\n", A);
    for (= 0; I < N; I++)
        if (D0[I] != inf && D1[I] == inf)
            fprintf(F, "%d ", I + 1);
    fclose(F);
    delete [] D0;
    delete [] D1;
    return 1;
}
(Vissza)