Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program do grafów

Ostatnio zmodyfikowano 2017-05-13 15:06
Autor Wiadomość
CCbolt
Temat założony przez niniejszego użytkownika
Program do grafów
» 2017-05-11 00:03:56
Mam problem z programem do grafów. Jak zapisać już wprowadzone wierzchołki aby program nie pytał o te same krawędzie
np jeżeli wprowadzę informacje że jest wierzchołek 1-2 to program z góry bedzie wiedział że już jest krawęðź 2-1.

C/C++
#include <stdio.h>

int read_graph( int tab[ 50 ][ 50 ], int n )
{
    int i, j;
    char reply;
   
    for( i = 1; i <= n; i++ )
    {
        for( j = 1; j <= n; j++ )
        {
            if( i == j )
            {
                tab[ i ][ j ] = 0;
                continue;
            }
            printf( "\n Wierzcholki %d & %d maj'?''?' krawedz ? (Y/N) :", i, j );
            while( getchar() != '\n' );
           
            scanf( "%c", & reply );
            if( reply == 'y' || reply == 'Y' )
                 tab[ i ][ j ] = 1;
            else
                 tab[ i ][ j ] = 0;
           
        }
    }
    return 0;
}

int main()
{
    int tab[ 50 ][ 50 ];
    int deg, i, j, n;
    printf( "\n Ile wierzcholkow ? : " );
    scanf( "%d", & n );
   
    read_graph( tab, n );
    printf( "\n Wierzcholek \t Stopien " );
   
    for( i = 1; i <= n; i++ )
    {
        deg = 0;
        for( j = 1; j <= n; j++ )
        if( tab[ i ][ j ] == 1 )
             deg++;
       
        printf( "\n\n %5d \t\t %d\n\n", i, deg );
    }
    return 0;
}
P-160928
DejaVu
» 2017-05-11 00:14:05
opcja A: zapisz dwie krawędzie z A do B i z B do A.
opcja B: zapisuj zawsze krawędź jako para, gdzie pierwszy indeks jest zawsze mniejszy od drugiego. Sprawdzanie czy istnieje dana krawędź będzie wymagało dostosowania się do tej reguły.
P-160930
CCbolt
Temat założony przez niniejszego użytkownika
» 2017-05-11 11:49:05
Nie wiem jak to zaimplementować, chciałem aby 1 była wstawiana symetrycznie. Możesz mi to wrzucić z opisem abym prześledził program?
C/C++
scanf( "%c", & reply );
if( reply == 'y' || reply == 'Y' )
{
    tab[ i ][ j ] = 1;
    tab[ j ][ i ] = 1;
} else
{
    tab[ i ][ j ] = 0;
    tab[ j ][ i ] = 0;
P-160937
darko202
» 2017-05-11 13:48:16
P-160940
CCbolt
Temat założony przez niniejszego użytkownika
» 2017-05-11 14:12:03
Ktoś coś?
P-160943
CCbolt
Temat założony przez niniejszego użytkownika
» 2017-05-12 13:18:32
Potrzebuję zmodyfikować kod aby zwracał informację, czy podany graf jest eulerowski, sprawdzał spójność grafu i wypisał jego cykl.
C/C++
#include <stdio.h>

int read_graph( int tab[ 50 ][ 50 ], int n )
{
    int i, j;
    char reply;
   
    for( i = 1; i <= n; i++ )
    {
        for( j = i; j <= n; j++ )
        {
            if( i == j )
            {
                tab[ i ][ j ] = 0;
                tab[ j ][ i ] = 0;
                continue;
            }
            printf( "\n Wierzcholki %d & %d maja' krawendz ? (Y/N) :", i, j );
            while( getchar() != '\n' );
           
            scanf( "%c", & reply );
            if( reply == 'y' || reply == 'Y' )
            {
                tab[ i ][ j ] = 1;
                tab[ j ][ i ] = 1;
               
                if( i == j )
               
                     tab[ i ][ j ] = tab[ i ][ j ] + 1;
               
            }
            else
            { tab[ i ][ j ] = 0;
            }
        }
    }
    return 0;
}

int main()
{
    int tab[ 50 ][ 50 ];
    int deg, i, j, n;
    printf( "\n Ile wierzcholkow ? : " );
    scanf( "%d", & n );
   
    read_graph( tab, n );
    printf( "\n Wierzcholek \t Stopien " );
   
    for( i = 1; i <= n; i++ )
    {
        deg = 0;
        for( j = 1; j <= n; j++ )
        if( tab[ i ][ j ] == 1 )
             deg++;
       
        printf( "\n\n %5d \t\t %d\n\n", i, deg );
    }
    return 0;
}
P-160996
darko202
» 2017-05-13 15:06:54
przeczytaj uważnie np.
http://eduinf.waw.pl/inf/alg​/001_search/0134.php
opis "Istnienie cyklu lub ścieżki Eulera"
+ kod w C++

moim zdaniem rozwiązuje zadany problem
P-161051
« 1 »
  Strona 1 z 1