Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #define MAX 10
- #define INFINITY 999
- int waga[MAX][MAX],droga[MAX],pop[MAX],Graf[MAX][MAX],W[MAX],x;
- FILE * PTab, * PArg, * PWyj;
- void algorytm(int Graf[MAX][MAX],int n,int startnode);
- void czytajTab(const char * filename);
- void czytajArg(const char * filename);
- void zapisz(const char * filename);
- void interfejs();
- int main() {
- int i;
- char q;
- interfejs();
- while (1) {
- scanf("%c", &q);
- switch (q) {
- case 'w':
- czytajArg("wierzcholki.txt");
- if (PArg != NULL) {
- printf("Plik zostal wczytany pomyslnie\n");
- } else {
- printf("Nie znaleziono pliku");
- }
- break;
- case 'g':
- czytajTab("tablica.txt");
- if (PTab != NULL) {
- printf("Plik zostal wczytany pomyslnie\n");
- } else {
- printf("Nie znaleziono pliku");
- }
- break;
- case 'o':
- for(i = 0; i < MAX; i++){
- if(W[i] != 0){
- printf("wierzcholek startowy: %d", W[i]);
- algorytm(Graf,x,W[i]);
- }
- }
- zapisz("projekt.txt");
- break;
- case 'q':
- return 0;
- break;
- }
- }
- return 0;
- }
- void algorytm(int Graf[MAX][MAX],int n,int startnode) {
- int sprawdzone[MAX],ilosc,mindroga,nextnode,i,j;
- for(i = 1; i <= x; i++)
- for(j = 1; j <= x; j++)
- if(Graf[i][j] == 0)
- waga[i][j] = INFINITY;
- else
- waga[i][j] = Graf[i][j];
- for(i = 1; i <= x; i++)
- {
- droga[i] = waga[startnode][i];
- pop[i] = startnode;
- sprawdzone[i] = 0;
- }
- droga[startnode] = 0;
- sprawdzone[startnode] = 1;
- ilosc = 1;
- while(ilosc < x-1)
- {
- mindroga = INFINITY;
- for(i=1; i <= x; i++)
- if(droga[i] < mindroga && !sprawdzone[i])
- {
- mindroga = droga[i];
- nextnode = i;
- }
- sprawdzone[nextnode] = 1;
- for(i = 1; i <= x; i++)
- if(!sprawdzone[i])
- if(mindroga + waga[nextnode][i] < droga[i])
- {
- droga[i] = mindroga + waga[nextnode][i];
- pop[i] = nextnode;
- }
- ilosc++;
- }
- for(i = 1; i <= x; i++)
- if(i != startnode)
- {
- printf("\n%d : %d",droga[i],i);
- j = i;
- do
- {
- j = pop[j];
- printf("<-%d", j);
- }while(j != startnode);
- }
- printf("\n");
- }
- void czytajTab(const char * filename) {
- int i, j, y;
- float c;
- PTab = fopen(filename, "r");
- for (i = 1; i <= x; i++) {
- for (j = 1; j <= x; j++) {
- if (i == j) {
- Graf[i][j] = 0;
- } else {
- Graf[i][j] = 0;
- }
- }
- }
- while (!feof(PTab)) {
- fscanf(PTab, "%d %d %f", &x, &y, &c);
- Graf[x][y] = c;
- }
- }
- void czytajArg(const char * filename) {
- int i;
- PArg = fopen(filename, "r");
- while (!feof(PArg)) {
- for (i = 0; i < MAX; i++) {
- fscanf(PArg, "%d", & W[i]);
- }
- }
- }
- void zapisz(const char * filename) {
- int i,j;
- PWyj = fopen(filename, "w");
- for(i = 1; i <= x; i++){
- printf("\n%d : %d",droga[i],i);
- j = i;
- do
- {
- j = pop[j];
- printf("<-%d", j);
- }while(j != pop[i]);
- }
- fclose(PWyj);
- }
- void interfejs() {
- printf("============================================================================\n");
- printf("Program sluzy do obliczania najkrotszych sciezek z wierzcholka poczatkowego do wybranych wierzcholkow.\n");
- printf("Przelaczniki:\n");
- printf("'w' - wczytywanie pliku tekstowego z wierzcholkiem\n");
- printf("'g' - wczytywanie pliku tekstowego z grafem\n");
- printf("'o' - zapisz raport do pliku\n");
- printf("'q' - zakonczenie dzialania programu\n");
- printf("============================================================================\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement