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ść. 
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;
}