Macierz sąsiedztwa - graf

0

Witam, mam mały problem z macierzą sąsiedztwa. Otóż otrzymuje 2 pytania o połączenie wierzchołków na raz. Widać to na tym screenie:
user image

Nie widzę błędu w kodzie. Może ktoś świeżym spojrzeniem dostrzeże błąd. Z góry dzięki:)

Oto kod:

#include <stdio.h>
#include <stdlib.h>
void main()
{
   int wybor;
   do
   {
    printf("\n Program do reprezentacji grafu za pomoca ");
	printf("macierzy sasiedztwa \n ");
	printf("\n 1. Graf skierowany ");
	printf("\n 2. Graf nieskierowany ");
	printf("\n 3. Wyjscie ");
	printf("\n\n Wybierz odpowiednia opcje : ");
	scanf("%d", &wybor);
	switch(wybor)
	{
            case 1 : skierowany();
                     break;
            case 2 : nieskierowany();
                     break;
            case 3 : exit(0);
	} // switch
    }while(1);
}

int skierowany()
{
    int graf[50][50];
    int n;
    int przych, wych, i, j;
    int stopien_max;
    printf("\n Ile wierzcholkow ma graf? : ");
    scanf("%d", &n);
    wczytaj_graf(graf, n);
    stopien_max = 0;
    printf("\n Wierzcholek \t Wezel przych \t Wezel wych \t Stopien ");
    for (i = 1; i <= n ; i++ )
    {
        przych = wych = 0;
	for ( j = 1 ; j <= n ; j++ )
	{
            if ( graf[j][i] == 1 )
                przych++;
	}
        for ( j = 1 ; j <= n ; j++ )
            if (graf[i][j] == 1 )
                wych++;
            printf("\n\n %5d\t\t\t%d\t\t%d\t\t%d\n\n",i,przych,wych,przych+wych);
            if (przych+wych > stopien_max)
                stopien_max = przych+wych;
    }
    printf("\n Stopien grafu wynosi: %d\n", stopien_max);
    return;
}

int nieskierowany()
{
    int graf[50][50];
    int stopien, stopien_max;
    int i, j, n;
    printf("\n Ile wierzcholkow ma graf? : ");
    scanf("%d", &n);
    wczytaj_graf(graf, n);
    printf("\n Wierzcholek\t Stopien ");
    stopien_max = 0;
    for ( i = 1 ; i <= n ; i++ )
    {
        stopien = 0;
        for ( j = 1 ; j <= n ; j++ )
            if ( graf[i][j] == 1)
                stopien++;
        printf("\n\n %5d \t\t %d\n\n", i, stopien);
        if (stopien > stopien_max)
            stopien_max = stopien;
    }
    printf("\n Stopien grafu wynosi: %d\n", stopien_max);
    return;
}

int wczytaj_graf ( int graf[50][50], int n )
{
    int i, j;
    char odp;
    for ( i = 1 ; i <= n ; i++ )
    {
        for ( j = 1 ; j <= n ; j++ )
        {
            if ( i == j )
            {
                graf[i][j] = 0;
            continue;
            }
            printf("\n Wierzcholki %d i %d sa polaczone? (T/N) :",i,j);
            scanf("%c", &odp);
            if ( odp == 't' || odp == 'T' )
                graf[i][j] = 1;
            else
                graf[i][j] = 0;
	}
    }
    return;
}

 
0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Używaj wyłącznie angielskiego nazewnictwa: http://4programmers.net/Forum/1208091
  4. scanf(" %c",&odp); - z tym że ten pomysł na wprowadzenie jest totalnie bez sensu.
for(;;)
  {
   printf("Podaj połaczoną parę wierzchołków (!-koniec): ");
   if(scanf("%d%d",&y,&x)==2) graf[y][x]=1;
   else
     {
      if(getchar()=='!') break;
      printf("Błąd wprowadzenia\n");
     }
   while(getchar()!='\n') {}
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1