Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Graf transponowany

$
0
0

Witam! Jestem na matmie ale jednym z moich przedmiotów jest także programowanie ale nie ukrywam, że nie najlepiej sobie z nim radze, więc proszę o cierpliwość. laugh

Mam za zadanie napisać program, który stworzy graf transponowany z grafu wczytanego z pliku oraz wyświetli listy sąsiedztwa grafu transponowanego.

plik graf.txt zawiera:

5
0 1
0 2
0 4
1 2
2 3
1 3
3 3
3 4
4 2


Zamieszczam co tam wyskorobałem i z góry dziękuję za pomoc!

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

typedef struct ElemListy {
    int nr;
    struct ElemListy *next;
} ElemListy;

typedef struct {
    int n; // ilosc wierzcholkow grafu
    ElemListy* ls[MAX]; // ls[k] jest wskaznikiem do pierwszego elementu listy sasiedztwa wierzcholka nr k
} Graf;

void WczytajTransponowany(char* nazwa_pliku, Graf* gT)
{
    int i;

    FILE* f = fopen(nazwa_pliku, "r");
    if (f == NULL) {
        printf("Blad otwierania pliku %s.\n", nazwa_pliku);
        return;
    }

    gT->n = 0;
    if (fscanf(f, "%d", &(gT->n)) == 0) {
        printf("Zly format danych dla grafu.\n");
        fclose(f);
        return; // zly format pliku danych wejsciowych
    }

    for (i = 0; i < gT->n; i++)
        gT->ls[i] = NULL;

    while (!feof(f)) {
        int u, v;
        if (fscanf(f, "%d%d", &v, &u) == 2) {
            // mamy krawedz z v do u

            if (v >= gT->n || u >= gT->n) {
                printf("Nie poprawne dane grafu.\n");
                fclose(f);
                return;
            }

            ElemListy* wsk = (ElemListy*) malloc(sizeof(ElemListy));
            wsk->nr = u;
            wsk->next = gT->ls[v];
            gT->ls[v] = wsk;
        }
    }

    fclose(f);
}

void WczytajGraf(char* nazwa_pliku, Graf* g)
// nazwa_pliku jest parametrem wejsciowy
// g jest parametrem wyjsciowym
{
    int i;

    FILE* f = fopen(nazwa_pliku, "r");
    if (f == NULL) {
        printf("Blad otwierania pliku %s.\n", nazwa_pliku);
        return;
    }

    g->n = 0;
    if (fscanf(f, "%d", &(g->n)) == 0) {
        printf("Zly format danych dla grafu.\n");
        fclose(f);
        return; // zly format pliku danych wejsciowych
    }

    for (i = 0; i < g->n; i++)
        g->ls[i] = NULL;

    while (!feof(f)) {
        int u, v;
        if (fscanf(f, "%d%d", &u, &v) == 2) {
            // mamy krawedz z u do v

            if (u >= g->n || v >= g->n) {
                printf("Nie poprawne dane grafu.\n");
                fclose(f);
                return;
            }

            ElemListy* wsk = (ElemListy*) malloc(sizeof(ElemListy));
            wsk->nr = v;
            wsk->next = g->ls[u];
            g->ls[u] = wsk;
        }
    }

    fclose(f);
}

void WyswietlTransponowany(Graf* gT)
{
    int i;

    printf("Ilosc wierzcholkow: %d.\n", gT->n);

    for (i = 0; i < gT->n; i++) {
        printf("Lista sasiedztwa wierzcholka nr %d: ", i);
        ElemListy* wsk = gT->ls[i];
        while (wsk != NULL) {
            printf("%d ", wsk->nr);
            wsk = wsk->next;
        }
        printf("\n");
    }
}

void WyswietlGraf(Graf* g)
{
    int i;

    printf("Ilosc wierzcholkow: %d.\n", g->n);

    for (i = 0; i < g->n; i++) {
        printf("Lista sasiedztwa wierzcholka nr %d: ", i);
        ElemListy* wsk = g->ls[i];
        while (wsk != NULL) {
            printf("%d ", wsk->nr);
            wsk = wsk->next;
        }
        printf("\n");
    }
}

int main()
{
    char nazwa_pliku[80];
    printf("Podaj nazwe pliku zawierajacego dane grafu: ");
    scanf("%s", nazwa_pliku);

    printf("Graf g\n");
    Graf g;
    WczytajGraf(nazwa_pliku, &g);
    WyswietlGraf(&g);

    printf("\n");

    printf("Graf gT\n");
    Graf gT;
    WczytajTransponowany(nazwa_pliku, &gT);
    WyswietlTransponowany(&gT);

    return 0;
}

 


Viewing all articles
Browse latest Browse all 21942

Trending Articles


Iron Lead - punkty pomiarowe nadwozi


Windows MX 9 by MalcolmX (x86/x64) [PL] [.iso]


[159] P1670 P1671 - 1.75 tbi


Sprawdź z którą postacią z anime dzielisz urodziny


Sok malinowy


Antena Rybakowa


Thinspiracje


[Muzyka] VA - Jazz Collection 12CD (2011) [FLAC] Dodane przez: szakim


Ciech & Mały Esz - jako High Definition (2014)


Praktyczny Elektronik – Rocznik 1993