#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
main()
{
int i,j;
int k=0;
int w=0; //w - liczba wszystkich wezlow(wierzcholkow)
int x=0;
const int max_kol=9;
const int max_sas=max_kol-1;
FILE *plik;
char znak,nazwa_pliku[20];
struct Wierzcholek{
int wezel;
int sasiedzi[max_sas]; //czy trzeba zerami wypełnic kazdy wsk[i]???
int liczba_sas;
int kolor;
} *wezel_pomoc;
//lista kolorów wg malejacego ich priorytetu
int *kolory=(int *)malloc((max_kol+1)* sizeof(int));
for(i=1;i<=max_kol+1;i++);
kolory[i]=i;
//odczyt z pliku tabeli
printf("Podaj nazwe pliku w ktorym miesci sie graf:\n");
scanf("%s",&nazwa_pliku);
plik = fopen(nazwa_pliku, "r");
do
{
fscanf(plik,"%d%c",&i,&znak);
w=w+1;
}
while((znak==' ')||(znak==','));
rewind(plik);
int tab[w][w];
for(i=0;i<=w-1;i++)
for(j=0;j<=w-1;j++)
{
fscanf(plik,"%d,",&tab[i][j]);
}
fclose(plik);
//wypisanie tablicy sasiedztwa grafu
printf("\n\nTABLICA SASIEDZTWA GRAFU:\n\n");
for(i=0;i<=w-1;i++)
{
for(j=0;j<=w-1;j++)
printf("%d \t",tab[i][j]);
printf("\n");
}
// stworzenie tylu pól o nazwie KrawedzGrafu ile jest krawędzi
struct Wierzcholek *wsk=(Wierzcholek *)malloc(w* sizeof(struct Wierzcholek));
// przekazywanie informacji z tablicy do odpowiedniej struktury
for(i=0;i<w;i++)
{
(wsk+i)->wezel=i+1;
(wsk+i)->liczba_sas=0; //pocz.deklaracja liczby sasiadow
for(j=0;j<w;j++)
if(tab[i][j]!=0)
{
(wsk+i)->sasiedzi[k]=j+1;
(wsk+i)->liczba_sas=(wsk+i)->liczba_sas+1;
k=k+1;
}
k=0;
}
// Sortowanie
while(x<w)
{
for(i=x;i<w;i++)
if((wsk+i)->liczba_sas>k)
{
k=(wsk+i)->liczba_sas;
j=i;
}
k=0;
wezel_pomoc->wezel=(wsk+x)->wezel;
wezel_pomoc->liczba_sas=(wsk+x)->liczba_sas;
for(i=0;i<max_sas;i++)
wezel_pomoc->sasiedzi[i]=(wsk+x)->sasiedzi[i];
(wsk+x)->wezel=(wsk+j)->wezel;
(wsk+x)->liczba_sas=(wsk+j)->liczba_sas;
for(i=0;i<max_sas;i++)
(wsk+x)->sasiedzi[i]=(wsk+j)->sasiedzi[i];
(wsk+j)->wezel=wezel_pomoc->wezel;
(wsk+j)->liczba_sas=wezel_pomoc->liczba_sas;
for(i=0;i<max_sas;i++)
(wsk+j)->sasiedzi[i]=wezel_pomoc->sasiedzi[i];
x=x+1;
}
// przypisywanie wezlom kolorów wg algorytmu LF
while(x<w)
{
for(i=0;i<(wsk+x)->liczba_sas;i++)
for(j=0;j<w;j++)
{
if((wsk+x)->sasiedzi[i]!=(wsk+j)->wezel)
continue;
else
kolory[(wsk+j)->kolor]=0;
}
k=max_kol;
for(i=1;i<max_kol;i++)
if((kolory[i]<k)&&(kolory[i]!=0))
k=kolory[i];
(wsk+x)->kolor=k;
for(i=1;i<=max_kol;i++)
kolory[i]=i;
x=x+1;
}
for(i=0;i<w;i++)
printf("\n\n %d, %d, %d \n",(wsk+i)->wezel,(wsk+i)->liczba_sas,(wsk+i)->kolor);
system("PAUSE");
return 0;
}Mam pytanie czy jak deklaruje strukturę i w niej jakąś zmienną np. tablicową to czy elementy domyslnie są w niej równe 0??? W trakcie programu po podaniu nazwy pliku pojawia się windosowskie okienko, że wystąpił problem z aplikacją... Obczaiłem dając instrukcję printf("caasdasdsd") że problem w tkwi we fragmencie kodu //SORTOWANIE Po prostu za tym fragmentem kodu napis się nie pojawiał a przed jak dałem printfa to się pojawił, więc cośtam jest nie tak tylko ciekawe co... Jeszcze dokładniej to instrukcje za k=0. Może przepisze ten fragment:
wezel_pomoc->wezel=(wsk+x)->wezel;
wezel_pomoc->liczba_sas=(wsk+x)->liczba_sas;
for(i=0;i<max_sas;i++)
wezel_pomoc->sasiedzi[i]=(wsk+x)->sasiedzi[i];
(wsk+x)->wezel=(wsk+j)->wezel;
(wsk+x)->liczba_sas=(wsk+j)->liczba_sas;
for(i=0;i<max_sas;i++)
(wsk+x)->sasiedzi[i]=(wsk+j)->sasiedzi[i];
(wsk+j)->wezel=wezel_pomoc->wezel;
(wsk+j)->liczba_sas=wezel_pomoc->liczba_sas;
for(i=0;i<max_sas;i++)
(wsk+j)->sasiedzi[i]=wezel_pomoc->sasiedzi[i];
x=x+1;
}
Chcę aby (wsk+j) powędrował na miejsce (wsk+x) a (wsk+x) na miejsce (wsk+j).