• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Graf c++ problem z zadaniem

Object Storage Arubacloud
0 głosów
521 wizyt
pytanie zadane 26 kwietnia 2019 w C i C++ przez Fr3sh98x Nowicjusz (210 p.)

Dzień dobry mam problem z jednym z zadań. Napisz program, który pobierze od użytkownika macierz sąsiedztwa grafu G (wierzchołki numerujemy od jedynki), a następnie wyświetli następujące informacje (każda informacja w osobnej linii): Napisałem coś takiego:

#include <iostream>
#include <vector>

using namespace std;

int ar[15][15];
int n;
int krawedzie, laczonekrawedzie;
int stopienwierzcholka;
vector <int> stwierzolka;
float srednia;

int main()
{
    cout << "Podaj liczbe wierszy macierzy: ";
    cin>>n;

    for(int i=0;i<n;i++)
    {

        for(int j=0;j<n;j++)
        {
            cin>>ar[i][j];
        }
    }

    cout<<"Liczba Wierzcholkow: "<<n<<endl;

    for(int i=0;i<n;i++)
    {
        stopienwierzcholka=0;
        for(int j=0;j<n;j++)
        {
           if(ar[j][i]==1) stopienwierzcholka++;
           if(ar[i][j]==1) krawedzie++;
           if((ar[i][j]==1)&&(ar[j][i]==1)) laczonekrawedzie++;
        }
        stwierzolka.push_back(stopienwierzcholka);
    }
    cout<<"Liczba krawedzi: "<<krawedzie-(laczonekrawedzie/2)<<endl;
    cout<<"Stopnnie wierzcholkow: ";

          for(int i=0;i<stwierzolka.size();i++)
          {
              srednia+=stwierzolka[i];
              cout<<stwierzolka[i]<<" ";
          }
    cout<<endl<<"Sredni stopien: "<<srednia/stwierzolka.size()<<endl;
  /*  if(laczonekrawedzie==krawedzie)
    {
        cout<<"Jest to cykl"<<endl;
    }
    */
    return 0;
}

Jak zrobić tak żeby nie było trzeba określać wielkości macierzy przez użytkownika?

komentarz 26 kwietnia 2019 przez gagyn Stary wyjadacz (11,050 p.)
Mógłbyś doprecyzować pytanie, ponieważ nie do końca rozumiem co chcesz zrobić?
1
komentarz 27 kwietnia 2019 przez DragonCoder Nałogowiec (36,500 p.)
Chyba chodzi mu o to, zeby uzytkownik nie musial podawać liczbe wierszy macierzy. Wydajw mi sie, ze petla while powtarzajaca sie dopoki cos nie przerwie wpisywania kolejnych wierszy. W petli trzeba podać warunek przerwania.

Masz problem, bo program sie wysypie, gdy uzytkownik poda zbyt duza ilosc wierszy lub za dlugo bedzie wpisywać dane, dlatego lepiej bedzie uzyc vector ow
komentarz 27 kwietnia 2019 przez niezalogowany

DragonCoder o tym mówiłeś.

#include <iostream>
#include <vector>
#include <limits>


using namespace std;
 //int ar[15][15];
 vector<vector<int> >ar {{0}};
int n;
int krawedzie, laczonekrawedzie;
int stopienwierzcholka;
vector <int> stwierzolka;
float srednia;

int main()
{
    n=1;
    cout<<"wczytaj liczby by przerwać wcisnij litere i enter"<<endl;
    for(int i=0;i<n;i++)
    {
        vector<int>temp;

        for(int j=0;j<n;j++)
        {

            temp.push_back(0);
            if(!(cin>>ar[i][j]))break;

           if(i==0) n++;

        } temp.pop_back();if(i==0) n--;

         std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
        ar.push_back(temp);
     cout<< "kolejny (pozostalo do wczytania "<<n-i-1<<")"<<endl;
    }

    cout<<"Liczba Wierzcholkow: "<<n<<endl;

for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<ar[i][j]<<"\t";
        }
    cout<<endl;
    }

    return 0;
}

wyjście

wczytaj liczby by przerwaŠ wcisnij litere i enter
48 48 74
h
kolejny (pozostalo do wczytania 2)
78 79 j
kolejny (pozostalo do wczytania 1)
478 78 91
kolejny (pozostalo do wczytania 0)
Liczba Wierzcholkow: 3
48      48      74
78      79      0
478     78      91

Process returned 0 (0x0)   execution time : 24.503 s
Press any key to continue.

komentarz 27 kwietnia 2019 przez Fr3sh98x Nowicjusz (210 p.)

Dostaje input:  

0 0 0 0 0 1 0 0 1 1
0 0 0 1 1 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 1 0 0
0 1 0 0 0 0 1 1 1 0
1 0 1 0 0 0 1 0 0 1
0 0 0 0 1 1 0 0 1 0
0 0 0 1 1 0 0 0 0 0
1 1 0 0 1 0 1 0 0 0
1 0 0 0 0 1 0 0 0 0

output ma  byc:

Ilość wierzchołków: 10
Ilość krawędzi: 14
Stopnie wierzchołków: 3 3 1 2 4 4 3 2 4 2
Średni stopień: 2.8
Graf nie należy do żadnej z podstawowych klas.

Chodzi mi właśnie o  to co napisał  Dragon

komentarz 27 kwietnia 2019 przez niezalogowany
edycja 27 kwietnia 2019

mała pomyłka

if(i==0){n--;}

imput (kopiuj wklej do konsoli pliku txt z dodanymi / na końcu):

wczytaj liczby by przerwaŠ wcisnij litere i enter
0 0 0 0 0 1 0 0 1 1/
kolejny (pozostalo do wczytania 9)
0 0 0 1 1 0 0 0 1 0/
kolejny (pozostalo do wczytania 8)
0 0 0 0 0 1 0 0 0 0/
kolejny (pozostalo do wczytania 7)
0 1 0 0 0 0 0 1 0 0/
kolejny (pozostalo do wczytania 6)
0 1 0 0 0 0 1 1 1 0/
kolejny (pozostalo do wczytania 5)
1 0 1 0 0 0 1 0 0 1/
kolejny (pozostalo do wczytania 4)
0 0 0 0 1 1 0 0 1 0/
kolejny (pozostalo do wczytania 3)
0 0 0 1 1 0 0 0 0 0/
kolejny (pozostalo do wczytania 2)
1 1 0 0 1 0 1 0 0 0/
kolejny (pozostalo do wczytania 1)
1 0 0 0 0 1 0 0 0 0/
kolejny (pozostalo do wczytania 0)

output:

Liczba Wierzcholkow: 10
0       0       0       0       0       1       0       0       1       1
0       0       0       1       1       0       0       0       1       0
0       0       0       0       0       1       0       0       0       0
0       1       0       0       0       0       0       1       0       0
0       1       0       0       0       0       1       1       1       0
1       0       1       0       0       0       1       0       0       1
0       0       0       0       1       1       0       0       1       0
0       0       0       1       1       0       0       0       0       0
1       1       0       0       1       0       1       0       0       0
1       0       0       0       0       1       0       0       0       0
Liczba Wierzcholkow: 10
Liczba krawedzi: 14
Stopnnie wierzcholkow: 3 3 1 2 4 4 3 2 4 2
Sredni stopien: 2.8

Process returned 0 (0x0)   execution time : 3.680 s
Press any key to continue.

 

cina możesz przesunąć z własnym pomyślunkem

a z piku to getline  i :npos, czy jakoś tak

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
0 odpowiedzi 367 wizyt
pytanie zadane 31 maja 2017 w C i C++ przez Wiciorny Ekspert (269,770 p.)
0 głosów
0 odpowiedzi 64 wizyt
+1 głos
0 odpowiedzi 574 wizyt
pytanie zadane 16 stycznia 2018 w Algorytmy przez karola Nowicjusz (230 p.)

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...